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

现在用这样一段代码:
(()=>{
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()不也是等待这个异步函数执行完再执行下面的内容吗?
请指教哪里理解的不对,谢谢了~
心有法竹
浏览 259回答 2
2回答

胡子哥哥

为什么:then接收的函数是会被判断的,如果这个函数是promise,那么下一个then会变成传入的这个promise的then,如果这个函数不是promise,那么下一个then还是最开始的那个promise的then
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript