process.nextTick()何时在节点中运行


const fs = require("fs");
const crypto = require("crypto");
const start = Date.now();
const OS = require("os");
fs.readFile("test-file", () => {
setTimeout(() => {
console.log("Timer");
}, 1500);
process.nextTick(() => {
console.log("next tick");
});
crypto.pbkdf2Sync("password", "salt", 100000, 1024, "sha512");
console.log(Date.now() - start);
crypto.pbkdf2Sync("password", "salt", 100000, 1024, "sha512");
console.log(Date.now() - start);
crypto.pbkdf2("password", "salt", 100000, 1024, "sha512", () => {
console.log(Date.now() - start, "ASYNC");
});
});
fs.readFile("test-file", () => {
console.log("in here");
});

输出:

1028
2051
next tick
in here
Timer
3074 ASYNC

根据我之前的知识,我认为process.nextTick在进入下一阶段之前会在每个阶段之后运行。

然而,由于";在这里";来自I/O轮询,并且由于setTimout(其已经超时;在这里";,很明显,nextTick是在事件循环从i/o轮询转移之前执行的。

我现在理解的是,process.nexttick是在将新函数传递给线程之前在当前阶段执行的。此处给出了描述:https://nodejs.org/es/docs/guides/event-loop-timers-and-nexttick/#poll但我不明白";在这里,操作被定义为从底层C/C++处理程序的转换,并处理需要执行的JavaScript"意思是

https://nodejs.dev/learn/understanding-process-nexttick

您给出了两个函数,它们执行在事件循环中执行的asap但在第一个fs.readFile((函数中,process.nextTick((在经过第一个fs函数后执行,setTimeout在进程结束时执行

所以基本上process.nextTick((在函数的当前操作结束时执行但是async函数在完成其操作并返回到消息que中时将返回,然后返回其输出。

最新更新