【发布时间】:2020-02-23 22:28:59
【问题描述】:
我正在使用 axios 响应拦截器,在我取消请求后,我需要中断承诺链。我不想为我的应用程序中的所有请求添加取消请求的错误检查。我试过蓝鸟,但似乎只是取消承诺,而不是断链。 我必须在第一次捕获时处理错误。此图显示了一般问题。最新的 then 和 catch 位于不同的文件中。
Promise
.then((response) => {
)
.catch((error) => {
// break promise here
})
.then((response) => {
// skip
// I don't want any extra checks here!
)
.catch((error) => {
// skip
// I don't want any extra checks here!
})
【问题讨论】:
-
@Liam 我知道,这就是为什么我试图找到任何可以做到这一点的图书馆。我需要通过各种方式克服这个问题,因为我必须向最新的 catch(在许多文件中)添加相同的错误处理。
-
@Liam - 你关于在承诺链上只有一个
.catch()的说法绝对不正确。您可以拥有任意数量的。而且,在.catch()内,您可以重新抛出,然后代码将命中链中的下一个.catch()。或者,您可以返回一个值,它将命中链中的下一个.then(),这可能会拒绝导致它在此之后命中下一个.catch()。您可以在承诺链中多次执行此操作。 -
SO Promise question。关于 then/resolve/reject 的有趣、详细的讨论。还可以深入了解自始至终提供的链接。在我看来,任何给定的
.then都可以对其调用.then的状态作出反应并做出相应的反应——即,如有必要,立即return;注意.then()有 2 个参数。最终,“主”Promise 调用它的“解析器”,如果您将其作为 Promise 构造函数参数提供,它会根据.then链设置的状态执行任何操作。
标签: javascript promise axios es6-promise bluebird