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

萌新!关于串行promise的一个问题求指导!

萌新!关于串行promise的一个问题求指导!

心有法竹 2019-08-21 12:45:57
现在用这样一段代码:(()=>{returnnewPromise((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如果改成:(()=>{returnnewPromise((resolve)=>{setTimeout(()=>{console.log('task1->3s')resolve()},3000);}).then(()=>{returnnewPromise((resolve)=>{setTimeout(()=>{console.log('task2->2s')resolve()},2000);})}).then(()=>{setTimeout(()=>{console.log('task3->1s')},1000);})})()就可以了而如果将第二个then改成再返回一个promise就会没问题,请问这是为什么,我的想法是,第一种用Promise.then()不也是等待这个异步函数执行完再执行下面的内容吗?请指教哪里理解的不对,谢谢了~
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

为什么:then接收的函数是会被判断的,如果这个函数是promise,那么下一个then会变成传入的这个promise的then,如果这个函数不是promise,那么下一个then还是最开始的那个promise的then
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号