现在用这样一段代码:(() => { 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
添加回答
举报
0/150
提交
取消