求解Promise的一道面试题

最近在看Promise相关知识,遇到一个面试题,以我的理解,应该是先输出a failed,然后b failed b passed的,可是为什么a failed在中间输出了??

https://img1.mukewang.com/5b65b9fc0001335507620405.jpg

慕姐4208626
浏览 874回答 2
2回答

jeck猫

强调: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。
打开App,查看更多内容
随时随地看视频慕课网APP