【发布时间】:2021-12-24 00:14:18
【问题描述】:
我有一个类似于下面代码的函数 - 它生成一个fetch,在调用成功与否时执行操作,并返回一个要在下游处理的承诺:
const myFunc = (): Response => {
return fetch('http://something')
.then(r => {
console.log('the call went through, the return code does not matter')
return r
})
.catch(err => {
console.error(`ah crap, the call failed completely: ${err}`)
// and here I do not know how to return a new Response
}
}
}
myFunc().then(r => {
console.log('do something once myFunc is over')
})
我的意图是在myFunc 完成后运行一些代码,但我需要考虑调用完全失败的情况(没有 DNS 解析、拒绝调用……)。为此,我需要在 catch() 中创建并返回 Response 承诺,例如,强制返回 503 代码(这并不正确,因为服务器甚至没有回答,但无论如何)。
我的问题:如何创建这样的Response 承诺?
【问题讨论】:
-
如果可以的话,使用
asyncawait和普通或花园try{}catch{}实际上要简单得多 -
为什么需要让网络故障看起来像 HTTP 故障?为什么不让它看起来像网络故障?
-
@TJCrowder:因为我想在获取完成后做某事(调用是否成功与那个“某事”无关,它只需要在获取之后(成功与否))。
-
你可以在 catch 中
return Promise.reject(someObject);让调用者看到 promise 失败。someObject可以是您希望调用者将其视为拒绝值的任何值(如果有意义,包括err)。然后您的调用者可以适当地处理承诺拒绝 -
@WoJ - 你不必创建一个虚假的 HTTP 错误来做到这一点。
标签: javascript promise es6-promise fetch-api