最近在看Promise相关知识,遇到一个面试题,以我的理解,应该是先输出a failed,然后b failed b passed的,可是为什么a failed在中间输出了??
2 回答
jeck猫
TA贡献1909条经验 获得超7个赞
强调: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
。
添加回答
举报
0/150
提交
取消