一个Promise如何实现三个异步事件的串行执行?

来源:3-6 详解promise

慕慕5249926

2020-01-29

一个Promise如何实现三个异步事件的串行执行?

写回答

2回答

谢成

2020-01-29

参考下这个代码:

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)

})


0
3
慕慕5249926
非常感谢!
2020-02-01
共3条回复

宅女之友

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

基础不好,谢谢老师指点·

0
0

微信小程序云开发-从0打造云音乐全栈小程序

横跨小程序端、云后端、CMS一站式云开发的小程序全栈课程

1938 学习 · 2768 问题

查看课程