【发布时间】:2021-07-10 12:45:51
【问题描述】:
promise 得到解决 CB 然后运行然后它在 catch 块运行之后抛出一个被拒绝的 promise 那么为什么另一个然后运行呢?我无法理解它背后的流程确实 catch 也返回一个新的承诺?
代码-
Promise.resolve()
.then(() => {
// Makes .then() return a rejected promise
throw new Error('Oh no!');
})
.catch(error => {
console.error('onRejected function called: ' + error.message);
})
.then(() => {
console.log("I am always called even if the prior then's promise rejects");
})
输出- 即使之前的承诺被拒绝,我也总是被召唤
onRejected 函数调用:哦不!
【问题讨论】:
-
是的,
catch()也是 returns a Promise -
和
.catch()处理拒绝,因此它返回的承诺不是拒绝的,而是履行的 -
一旦您进入
Promise领域,您将始终返回Promise。所以.catch()和.then()都会返回一个promise。他们返回的都是关于提供的回调返回的内容。你可以做一个.catch(e => (handleError(e), Promise.resolve(3)))并继续另一个.then()阶段。
标签: javascript reactjs asynchronous es6-promise