我希望我的node.js程序每30秒打印一次foo
。所以我写了这样的代码:
let count = 0
function foo () {
console.log(`foo`)
count += 1
// do other things that takes about 20 seconds.
}
while (count < 10) {
console.log(`inside while loop`) // my screen keep printing `inside while loop` until "JavaScript heap out of memory" error
setTimeout(foo, 30000) // It looks like that `foo` is scheduled to be triggered after 30 seconds. Before it gets triggered, node.js program keeps doing other things.
}
此代码没有达到我的预期。
看起来foo
计划在30秒后触发。
在触发之前,node.js程序会继续执行其他操作。
如何在30秒内暂停程序?
程序运行几秒钟,然后由于JavaScript heap out of memory
错误而崩溃。
sleep module不起作用。因为它在睡觉时,foo
停止做我需要的事情。
答案 0 :(得分:2)
这是因为JavaScript的异步性
while循环进行大量迭代并注册setTimeout
回调。
在每次回调执行后注册setTimeout
回调最好。
let counter = 0;
function foo() {
console.log(`foo ${counter}`);
counter ++;
if (counter < 3) {
setTimeout(foo, 1000);
}
}
foo();
另一种选择是使用setInterval并检查,如果需要取消下一次回调执行。