Promise 的执行顺序问题

发布于 2022-09-12 22:51:43 字数 1243 浏览 14 评论 0

遇到这样一个问题,打印结果是 0 1 2 3 4 5 6,我的理解是then中返回Promise会隐式调用一次 Promise的then在其中进行父级then的resolve,但是似乎这里调用了两次then。

Promise.resolve()
    .then(() => {
        console.log('0');
        return new Promise(resolve => {
            return resolve(4);
        });
    })
    .then(res => {
        console.log(res);
    });
Promise.resolve()
    .then(() => {
        console.log('1');
    })
    .then(() => {
        console.log('2');
    })
    .then(() => {
        console.log('3');
    })
    .then(() => {
        console.log('5');
    })
    .then(() => {
        console.log('6');
    });

给返回的Promise添加一个then,执行结果依然是 0 1 2 3 4 5 6

Promise.resolve()
    .then(() => {
        console.log('0');
        return new Promise(resolve => {
            return resolve(4);
        }).then(() => 4);
    })
    .then(res => {
        console.log(res);
    });
Promise.resolve()
    .then(() => {
        console.log('1');
    })
    .then(() => {
        console.log('2');
    })
    .then(() => {
        console.log('3');
    })
    .then(() => {
        console.log('5');
    })
    .then(() => {
        console.log('6');
    });

哪位大佬解答一下

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青春如此纠结 2022-09-19 22:51:43
Promise.resolve()
  .then(() => {// promise0
    console.log('0');
    return new Promise(resolve => {// promise1
      resolve(4);
    });
  })
  .then(res => {// promise2
    console.log(res);
  });

Promise.resolve()
  .then(() => {// promise3
    console.log('1');
  })
  .then(() => {// promise4
    console.log('2');
  })
  .then(() => {// promise5
    console.log('3');
  })
  .then(() => {// promise6
    console.log('5');
  })
  .then(() => {// promise7
    console.log('6');
  });

用注释标注了下会产生promise的地方,对照下面描述查看,大概顺序是这样:

  1. promise0执行,log(0),promise1放入微任务队列等待执行
  2. promise3执行,log(1),promise4放入微任务队列等待执行
  3. promise1完成,promise0放入微任务队列等待执行
  4. promise4执行,log(2),promise5放入微任务队列等待执行
  5. promise0完成,promise2将放入微任务队列等待执行
  6. promise5执行,log(3),promise6放入微任务队列等待执行
  7. promise2执行,log(4)
  8. promise6执行,log(5),promise7放入微任务队列等待执行
  9. promise7执行,log(6)
空城之時有危險 2022-09-19 22:51:43

之前有一个差不多的提问,关于promise.then执行顺序,如何理解?
第五个回答用图例描述的很明白了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文