一个Promise如何实现三个异步事件的串行执行?
来源:3-6 详解promise
慕慕5249926
2020-01-29
一个Promise如何实现三个异步事件的串行执行?
写回答
2回答
-
参考下这个代码:
new Promise((resolve, reject) => {
setTimeout(() => {
console.log(1)
resolve()
}, 1000)
}).then((res) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(2)
resolve()
}, 1000)
})
}).then((res) => {
setTimeout(() => {
console.log(3)
}, 1000)
})
032020-02-01 -
宅女之友
2020-03-29
哈哈,我也是这个问题,听到老师讲输出123的时候,我在想一个Promise输出3个,想所以然就测试
new Promise((resolve, reject) =>{ setTimeout(()=>{ console.log(1); resolve(); }, 1000) }).then((res)=>{ setTimeout(()=>{ console.log(2); resolve(); }, 2000) }).then((res)=>{ setTimeout(()=>{ console.log(3); }, 3000) })
字面上理解,这个是没错了,结果报错,第二个resolve is not defined
去掉后
new Promise((resolve, reject) =>{ setTimeout(()=>{ console.log(1); resolve(); }, 1000) }).then((res)=>{ setTimeout(()=>{ console.log(2); }, 2000) }).then((res)=>{ setTimeout(()=>{ console.log(3); }, 3000) })
虽然可以输出1,2,3,但是3出来得太快了,不像是过了3秒的样子,看到有同样的问题,然后看到老师的解答,同时也就明白为什么resolve is not defined了,一个Promise,对应一个resolve状态,后面要继续,就重新new一个,不过不是太明白为什么要return
基础不好,谢谢老师指点·
00
相似问题