该脚本来自Nodejs入门书籍。这部分是关于Javascript的事件循环。
const sleep_st = (t) => new Promise((r) => setTimeout(r, t));
const sleep_im = () => new Promise((r) => setImmediate(r));
(async () => {
setImmediate(() => console.log(1));
console.log(2);
await sleep_st(0);
setImmediate(() => console.log(3));
console.log(4);
})();
两个可能的输出是“2 4 1 3”和“2 1 4 3”。
我希望输出始终一致。
由于 JavaScript 事件循环、微任务和宏任务之间的相互作用,代码每次都会生成不同顺序的数字,从而引入了不确定性行为。
开始执行:
宏任务:sleep_st(0) 解决:
异步函数内部:
事件循环执行: