为了账号安全,请及时绑定邮箱和手机立即绑定

求解Promise的一道面试题

求解Promise的一道面试题

慕姐4208626 2018-07-31 10:20:27
最近在看Promise相关知识,遇到一个面试题,以我的理解,应该是先输出a failed,然后b failed b passed的,可是为什么a failed在中间输出了??
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

强调:Promise的每个thencatch都是异步执行的。

因此,实际上最先执行的是a.then,但没有定义catch,所以抛出异常,然后异步交给后面的catch处理(a failed)。此时下一个等待执行的是b.catchb failed),处理完之后,同样异步交给后面的thenb passed)。接着,之前排队的catchb 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

查看完整回答
反对 回复 2018-08-04
  • 2 回答
  • 0 关注
  • 865 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信