关于JS中Promise的问题

发布于 2022-09-05 23:09:43 字数 559 浏览 13 评论 0

这里是我的程序。

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

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

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

发布评论

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

评论(5

红焚 2022-09-12 23:09:43

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

clipboard.png

长途伴 2022-09-12 23:09:43

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

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

clipboard.png

桃扇骨 2022-09-12 23:09:43

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

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

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

悲凉≈ 2022-09-12 23:09:43

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

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