承诺得到解决,然后运行,然后在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");
})
输出-我总是被呼叫,即使先前的承诺被拒绝
函数名为:哦,不!
1条答案
按热度按时间kpbwa7wx1#
二者都
then()
及catch()
方法返回承诺,它们返回的承诺取决于两件事:最初的承诺会发生什么变化?
它们的回调函数返回什么?
最后
then()
方法对catch()
方法和作为catch()
方法在代码中隐式返回未定义的承诺,即catch()
方法的值解析为undefined
然后调用then()
方法。如果要停止执行最后一个
then()
方法,则需要拒绝catch()
方法。这可以通过重新引用错误或返回被拒绝的承诺来实现。您的代码执行如下所述:
Promise.resolve()
返回已解决的承诺步骤1中的已解决承诺导致调用
Promise.resolve().then(...)
方法的回调函数作为的回调函数
Promise.resolve().then(...)
抛出一个错误,由then()
方法被拒绝,错误对象作为拒绝原因。作为承诺的回报
then()
步骤2中的方法被拒绝,它将导致调用catch()
方法的回调函数。函数的回调函数
catch()
方法记录错误因为在的回调函数中没有显式的return语句
catch()
方法,则回调方法隐式返回undefined
.政府的承诺
catch()
方法使用其回调函数的返回值进行解析,即。undefined
作为承诺的回报catch()
方法,它调用最后一个then()
方法