5 回答
TA贡献1806条经验 获得超5个赞
强调:Promise的每个then或catch都是异步执行的。
因此,实际上最先执行的是a.then,但没有定义catch,所以抛出异常,然后异步交给后面的catch处理(a failed)。此时下一个等待执行的是b.catch(b failed),处理完之后,同样异步交给后面的then(b passed)。接着,之前排队的catch(b failed)执行,最后b passed执行。
这就是各个then/catch交替执行的原因。
整个过程类似于下面的代码:
setTimeout(function(){
console.log(1);
setTimeout(function(){
console.log(2);
}, 0);
}, 0);
setTimeout(function(){
console.log(3);
setTimeout(function(){
console.log(4);
}, 0);
}, 0);
结果打印1 3 2 4,而不是1 2 3 4。
TA贡献1836条经验 获得超13个赞
catch 本质也是 Promise.prototype.then 的封装,所以 a 相当于跳过了一轮循环,整个过程可以这么理解
reject('a')
reject('b')
(next turn)
reject('a') -> handle(onReject) 没 handler,传递下去
reject('b') -> handle(onReject) 这里被 catch 处理
(next turn)
reject('a') -> handle(onReject) -> handle(onReject) 这里被 catch 处理
reject('b') -> handle(onReject) -> handle(onFullfill)
添加回答
举报
