gpt4 book ai didi

javascript - 关于一段事件循环代码的随机结果

转载 作者:行者123 更新时间:2023-11-30 06:20:31 26 4
gpt4 key购买 nike

我正在研究 javascript 事件循环,我尝试了一些复杂的嵌套异步代码,其中一个让我非常复杂。代码片段如下:

console.log(1);
new Promise((resolve, reject) => {
console.log(2);
resolve();
}).then(() => {
setTimeout(() => { console.log(3) }, 0);
});
setTimeout(() => {
new Promise((resolve, reject) => {
console.log(4);
resolve();
}).then(() => { console.log(5) });
});

结果有时是 1 - 2 - 4 - 5 - 3,有时是 1 - 2 - 4 - 3- 5。

在浏览器环境和节点环境下执行相同。

可能是我代码写错了,还是V8解析事件循环有问题?

最佳答案

回调执行顺序并不是真正确定的。每当 Promise 解决时,执行 .then() 链的任务就会被推送到事件队列中。当计时器结算时也会发生同样的情况。当计时器同时运行时,如果它们彼此接近,它们可能不会完全按照它们启动的顺序完成。

  main code executes (1) {
promise (2) gets pushed onto the queue
promise (4) gets pushed onto the queue
}


promise resolves (2) {
a 0ms timer gets set (3)
}

// maybe the timer is done already (3)

promise resolves(4)

// maybe the timer is done now (3)

关于javascript - 关于一段事件循环代码的随机结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53425066/

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