gpt4 book ai didi

javascript - 这个具有异步操作的 Javascript 程序的输出应该是什么?

转载 作者:行者123 更新时间:2023-12-03 07:12:51 25 4
gpt4 key购买 nike

我希望这段代码能够运行,然后在 2 秒后,执行堆栈将变空并且有一个 setTimeout 回调。我期待这一点,因为我希望消息队列和作业队列为空(因为 promise 尚未解决)。

因此,Callback 首先被打印出来,然后在 3 秒后,promise 被 resolve,它的 callback 被放置在作业队列中,消息 Promise is resolved 应该被打印。但事实并非如此。那么我在这里缺少什么?

代码是:

setTimeout(function() {
console.log("Callbcack");
}, 0);

new Promise((resolve, reject) => {
console.log("Inside promise");
let ms = 5000 + new Date().getTime();
while (new Date() < ms) {}

resolve("Promise is resolved");

}).then((data) => {console.log(data)})
.catch((err) => {
console.log(err);
})

var ms = 2000 + new Date().getTime();
while (new Date() < ms) {}

最佳答案

Promise 执行器函数同步运行(恰好在您调用 new Promise(executor) 时),因此 promise 在 5000 毫秒后运行顶级代码(在初始堆栈)内得到解决。

然后,微任务队列被执行,所以你会看到 console.log(data) 的结果。

然后,js(事件循环)可以自由运行下一个异步片段,而这恰好是定时器处理程序。

关于javascript - 这个具有异步操作的 Javascript 程序的输出应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64115346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com