关于JS中Promise的问题

这里是我的程序。

function asyncFunction() {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      resolve('Async Hello world');
    }, 0);
  });
}


asyncFunction().then(function (value) {
  console.log(value);
}).catch(function (error) {
  console.log(error);
});

setTimeout(function() {
    console.log('1----->');  
}, 0);

请教一下大家,第二行中的Promise的对象函数是什么时候执行的。下面是运行结果
Image

阅读 2.9k
5 个回答

应该有歧义 ,但是我也不知道怎么标 ,大可以这么理解 ,就是跟回调函数的深度层次有关系

clipboard.png

Promise then在事件循环结束后调用,而settimerout在下一轮事件循环调用。

按照题主的代码,首先把settimeout放入消息队列,等待下一轮事件循环开始后调用,而Promise内还调用了settimeout,所以这里也放入消息队列,先后顺序就是这样。

clipboard.png

两个 setTimeout 都在本轮 event loop 中执行,在下轮 event loop 时执行回调。

执行回调时上方在 asyncFunction 中的 resolve 会将结果压进 Jobs 队列中,在该轮 event loop 之后,下轮 event loop 之前执行 asyncFunction().then 中的第一个参数 onFullfilled。

下方的回调则直接打印,所以先显示。

为什么我谷歌是先打印引文 后打印1-----》

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