简介:
在Node.js事件队列中,以及像“新承诺((R) => setTimeout(r,t))”这样的代码中,setTimeout()现在是在承诺解析的微队列中计算的吗?
详细信息:
我正在用Node.js阅读分布式系统(Thomas,O‘’Reilly,第一版第3版)。它告诉我,Node.js依次遍历每个队列:
多数情况下,包括I/O callbacks
在每个队列为空后,也有两个微队列进行评估,一个用于承诺,一个用于nextTick()。
在书的第13页,他有一个例子,其中一个等待调用函数返回“新的承诺((R) => setTimeout(r,t))”。书码是:
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);那是,
setImmediate(() => console.log(1));
console.log(2);
Promise.resolve().then(() => setTimeout(() => {
setImmediate(() => console.log(3));
console.log(4);这就是我所认为的情况:
()和setImmediate()开始
这意味着控制台的输出为“2.4”。然而,书中说,正确的顺序是"2,14,3“。也就是说,涉及到用于检查的事件队列,也许还有计时器。
那么,在承诺结果微队列中会发生什么呢?
发布于 2022-02-12 14:19:10
,当我们访问计时器队列时,将有工作要做
在进入计时器阶段之前,有检查阶段,所以"1“被打印在"3”之前,但是我在我的窗口上执行了代码,结果是2 4 1 3,即setTimeout和setImmediate将竞相执行,有时是setTimeout第一次,有些时候是第二次,我在短期内多次执行了本书中的示例代码。
https://stackoverflow.com/questions/69196083
复制相似问题