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

关于串行promise的一个问题

关于串行promise的一个问题

慕森卡 2019-03-11 20:04:32
现在用这样一段代码:(() => {  return new Promise((resolve) => {     setTimeout(() => {      console.log('task1 -> 3s')       resolve()     }, 3000);   })   .then(() => {       setTimeout(() => {        console.log('task2 -> 2s')         Promise.resolve()       }, 2000);   })   .then(() => {     setTimeout(() => {      console.log('task3 -> 1s')     }, 1000);   }) })() 输出的顺序是 task1 -> task3 -> task2如果改成:(() => {   return new Promise((resolve) => {     setTimeout(() => {       console.log('task1 -> 3s')       resolve()     }, 3000);   })   .then(() => {     return new Promise((resolve) => {       setTimeout(() => {         console.log('task2 -> 2s')         resolve()       }, 2000);     })   })   .then(() => {     setTimeout(() => {       console.log('task3 -> 1s')     }, 1000);   }) })()就可以了而如果将第二个then 改成再返回一个promise就会没问题,请问这是为什么,我的想法是,第一种用Promise.then()不也是等待这个异步函数执行完再执行下面的内容吗?请指教哪里理解的不对,谢谢了~
查看完整描述

2 回答

?
千巷猫影

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

为什么:
then 接收的函数是会被判断的,
如果这个函数是 promise,那么下一个 then 会变成传入的这个 promise 的 then,
如果这个函数不是 promise,那么下一个 then 还是最开始的那个 promise 的 then

查看完整回答
反对 回复 2019-03-11
  • 2 回答
  • 0 关注
  • 380 浏览
慕课专栏
更多

添加回答

举报

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