ES6 Promise问题

Promise.reject('a').then(()=>{
    console.log('a1')
}).catch(()=>{
    console.log('a2')
});

Promise.reject('b').catch(()=>{
    console.log('b1')
}).then(()=>{
    console.log('b2')
});

Promise.reject('c').then(()=>{
    console.log('c1')
}).catch(()=>{
    console.log('c2')
});

最终执行结果为:
b1 
a2 
c2 
b2

-------------------
为什么b1会在a2输出之前输出,c2会在b2输出之前输出

阅读 2.3k
2 个回答

输出的结果不对吧,应该是b1,a2,b2,c2。

Promise.reject('a').then(()=>{
  console.log('a1')
}).catch(()=>{
  console.log('a2')
});

Promise.reject('b').catch(()=>{
  console.log('b1')
}).then(()=>{
  console.log('b2')
});

Promise.reject('c').then(()=>{
  console.log('c1')
}).catch(()=>{
  console.log('c2')
});

你可以看成第一阶段 执行这三个
Promise.reject('a').then(()=>{
  console.log('a1')
})
Promise.reject('b').catch(()=>{
  console.log('b1')
})
Promise.reject('c').then(()=>{
  console.log('c1')
})
因为reject对应的是catch,所以先输出 b1

第二阶段是
.catch(()=>{
  console.log('a2')
})
.then(()=>{
  console.log('b2')
})
.catch(()=>{
  console.log('c2')
})
然后输出 a2,b2,c2
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题