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

  (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 的任务队列尾部添加回调函数。

阅读 2.3k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题