我正在编写一个简单的JS文件,它执行一堆我不在乎知道它们状态的承诺。如果我像这样启动节点:node index.js
节点将在完成触发承诺后立即退出,而它们仍在后台执行操作。
是否可以将参数传递给node
并告诉它等到事件循环为空后再退出?
我确实检查了node --help
但没有找到任何可能成为我正在寻找的选项。
重要提示:我不是在寻找代码解决方案,而是要传递给节点本身的参数。
参数传递给节点并告诉它等到事件循环为空后再退出?
不,没有这样的参数。所需的行为是节点中的默认值,无法更改。当事件队列为空且没有正在运行的异步任务时,Node 会退出事件循环。
如果代码中仍在执行操作但未注册任务,则代码中的内容已损坏。
我认为没有这样的功能可以利用来实现预期的结果。但是,如果您希望节点进程等到承诺完成,则可以await
它们。
对于任何计时器,nodejs 提供了取消它们的方法 (Doc(。
如果要等待计时器执行,则可以维护全局变量来跟踪计时器的状态。
你的代码需要做一些事情才能让节点继续运行。它可以做的一件事就是等待其他代码完成。有很多方法可以做到。一个简单的示例可能如下所示:
const resolveLater = () => {
return new Promise(resolve => setTimeout(resolve, 5000));
}
resolveLater().then(() => console.log('Done'));
如果需要多个事件,最简单的方法可能是执行单个异步函数来等待所有事件。
例如const resolveLater = (delay) => {
return new Promise(resolve => setTimeout(resolve, delay));
}
const resolveAll = async () => {
await Promise.all([
resolveLater(1000),
resolveLater(2000),
resolveLater(5000),
]);
}
resolveAll().then(() => console.log('Done'));
除了等待它们完成之外,您不必对承诺做任何事情。你确实关心他们的状态,即使你不关心他们的结果。