如何在nodeJS中实现阻塞之前的setTimeout

  • 本文关键字:setTimeout 实现 nodeJS node.js
  • 更新时间 :
  • 英文 :


我有这样的阻塞代码:

let a = 0;
setTimeout(() => {
console.log(a);
process.exit();
}, 1000);

while (true) {
a++;
}

如何使用nexttick函数解锁超时?或者有人这样想在阻止之前实现 setTimeout?

您在 setTimeout 中注册的回调永远不会被调用,因为您正在阻塞主线程。

您可以设置间隔来实现类似的东西,例如

let a = 2;
setTimeout(() => {
console.log(a);
process.exit();
}, 1000);
setInterval(() => {
// Square a
a = a * a;
}, 200);

在 Node 中阻止主线程并不是一个好主意!通常有更好的方法来异步方式做事。

当您运行同步代码时,Node 会被锁定,这意味着如果您有一个长时间运行的循环,则以异步方式构建它可能会有所帮助,以便它变得非阻塞。

while(true) { 
doSomeSyncronousStuff();
}

应该变成类似的东西

let someDelay = 0;
let loop = function(continueRunning){
doSomeSyncronousStuff();
if(continueRunning) {
// delay of as little as 0 pushes execution to at least next tick
setTimeout(loop,someDelay,continueRunning); 
}
};
loop(true);

最新更新