请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

一个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)

})


0 回复 有任何疑惑可以回复我~
  • 提问者 慕慕5249926 #1
    也就是new 一个Promise 是没有办法实现这个需求的
    回复 有任何疑惑可以回复我~ 2020-01-30 14:36:08
  • 谢成 回复 提问者 慕慕5249926 #2
    应该还是没有真正理解promise的作用,promise是对异步状态进行管理的,一般情况下一个promise里面是一个异步操作
    回复 有任何疑惑可以回复我~ 2020-01-30 17:19:50
  • 提问者 慕慕5249926 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-02-01 02:56:51
宅女之友 2020-03-29 23:00:39

哈哈,我也是这个问题,听到老师讲输出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 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信