我有这样的阻止代码:
let a = 0;
setTimeout(() => {
console.log(a);
process.exit();
}, 1000);
while (true) {
a++;
}
如何使用nexttick
函数解除超时限制?还是像这样的想法在阻塞while之前实现setTimeout?
答案 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);