【问题标题】:End node.js process with a loop after 5 seconds5 秒后循环结束 node.js 进程
【发布时间】:2022-11-22 02:08:46
【问题描述】:

我在 X 秒后结束节点进程时遇到一些问题。

我尝试了一些这种性质的东西:

setTimeout(() => { process.exit(0) }, 5000)

我试过将 1 传递给.exit()。我试过.kill().abort()。我似乎无法找到解决方案!
我正在运行一个在 setTimeout 之后启动的循环。 循环看起来像这样:

let ran = 0;
while(true) {
   ran++;
   console.log(ran)
}

【问题讨论】:

  • 在我的控制台中运行它对我来说很好。您要退出哪个进程?这个过程是如何创建的?
  • JavaScript 是单线程的。 setTimeout 在最后一个函数完成后将一个新函数加入队列。剩下的脚本是如何构建的?它是否允许评估process.exit()
  • 我正在运行一个无限循环,直到该计时器应该关闭并最终结束该过程。首先,我创建超时,然后启动循环。 While 和 For 循环是一样的。我只是简单地通过我的控制台运行 node index,js。
  • 那行不通的。运行无限循环会阻塞线程。你能重组它吗?我们是 setTimeout 的递归?
  • 你的意思是将循环放在超时内?有没有办法在循环运行时结束进程?

标签: javascript node.js


【解决方案1】:

一种方法是用递归setTimeout替换循环:

let ran = 0;
function f() {
   ran++;
   console.log(ran)
   setTimeout(f, 0);
}
f();

setTimeout(() => { process.exit(0) }, 5000)

这允许在两次迭代之间调用 process.exit(0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 2017-08-17
    • 2013-09-03
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    相关资源
    最近更新 更多