node.js暂停几秒钟

时间:2017-11-01 07:30:59

标签: node.js wait

我希望我的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停止做我需要的事情。

1 个答案:

答案 0 :(得分:2)

这是因为JavaScript的异步性

while循环进行大量迭代并注册setTimeout回调。 在每次回调执行后注册setTimeout回调最好。

let counter = 0;
function foo() {
  console.log(`foo ${counter}`);
  counter ++;
  if (counter < 3) {
    setTimeout(foo, 1000);
  }
}
foo();

另一种选择是使用setInterval并检查,如果需要取消下一次回调执行。