promise 异步是在当前 event loop 任务队列尾部添加其回调函数么?

发布于 2022-09-05 19:55:00 字数 527 浏览 8 评论 0

  (function () {
    console.log(1);
    var p4 = new Promise((resolve, reject) => {
      resolve('ok');
      setTimeout(() => {
        console.log(6)
      }, 500);
      console.log(2);
    });
    console.log(3);
    p4.then(value => {
      console.log(5);
      console.log(value);
    });
    console.log(4);
  })();
  // 1 2 3 4 5 ok undefined 6

问题:打印顺序为 4 5 ok 6?
这样理解正确么?Promise 异步是当前 event loop 的任务队列队尾添加了 resolve 的回调函数,而 setTimeout 我们知道是会下下一轮 event loop 的任务队列尾部添加回调函数。

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

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

发布评论

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

评论(1

冷情妓 2022-09-12 19:55:00

理解可以这么理解,事实上 Promise 是基于 Jobs(Microtasks) 机制的,即当前代码执行完只剩平台代码的时候就会触发,所以会在下一个 Event Loop 之前。这里平台代码包括引擎、环境和 Promise 本身实现的代码。

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