【发布时间】:2016-03-11 00:51:47
【问题描述】:
我对如何正确使用 fetch 有点困惑。即使我得到错误状态,它似乎也能解决。下面的代码是否正确(将 fetch 包装在另一个 promise 中)?
function a(url, config) {
if (!config)
config = {};
config = Object.assign(config, {
headers: {
'content-type': 'application/json;charset=utf-8'
}
})
return new Promise(
function(resolve, reject) {
fetch(url, config).then(
function(res) {
if (res.status == 200 && res.ok) {
console.log("Promise resolved")
resolve(res);
return;
}
console.log("Promise rejected")
reject(res);
},
function(rej) {
console.log("promise rejected")
reject(rej);
}
)
}
)
}
function b() {
a('/test').then(
function(res) {
console.log('success');
console.log(res)
},
function(rej) {
console.log('Rejected');
console.log(rej)
}
)
}
b();
【问题讨论】:
-
如果
fetch是所有现代浏览器中都存在的 fetch,那么正如您清楚地知道的那样,它会返回一个 Promise。所以没必要把它包装在一个promise中,它只会让事情变得混乱 -
实际上...即使出现 400 之类的错误状态,它也能解决。因此,如果我想让被调用者知道它有一个错误代码...我需要包装并拒绝如果它不是 ok/200 .虽然......目前......上面的代码按预期工作(b运行拒绝)......我正在查看我的代码以尝试重写上面的代码以匹配它。无论哪种方式,以上只是一个示例,而 fetch 正是我可以用来创建易于演示的 Promise 的方法。
-
看起来不错,使用此代码您会得到“Promise denied”、“Rejected”。正如预期的那样。不清楚是什么问题。
-
是的,对不起,我试着写一个简单的例子,实际上这个例子是有效的。我正在查看我的应用程序代码以尝试使其立即匹配。
-
@JaromandaX 再次......我怎样才能做到这一点并拒绝任何不是 200 的东西?默认情况下,如果不是 200,则 fetch 不会拒绝。当我使用 fetch 时,我希望 resolve 返回我可以使用的东西。目前,我什至无法重新创建我所看到的内容,但我的代码似乎在我的应用程序中按预期工作。还在研究中
标签: javascript angularjs ecmascript-6 fetch-api