猿问

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

青春有我
浏览 396回答 1
1回答

守着一只汪

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

相关分类

JavaScript
我要回答