在NodeJS中阻塞之前如何实现setTimeout

时间:2018-07-03 07:41:57

标签: node.js

我有这样的阻止代码:

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


while (true) {
    a++;
}

如何使用nexttick函数解除超时限制?还是像这样的想法在阻塞while之前实现setTimeout?

2 个答案:

答案 0 :(得分:0)

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

您可以设置Interval来实现类似的目的,例如

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

setInterval(() => {
    // Square a
    a = a * a;
}, 200);

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

答案 1 :(得分:0)

当您运行同步代码时,节点将被锁定,这意味着如果您有一个长时间运行的循环,以异步的方式构造它,使其变得无阻塞可能会有所帮助。

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);