Node.js:暂停执行并运行异步清理代码

时间:2019-02-25 01:14:36

标签: javascript node.js

我正在通过使用自定义exit事件运行异步清除代码,然后在所有清除代码运行后调用process.exit()

但是,在触发自定义exit事件之后,脚本的其余部分仍然执行。相反,当我调用process.exit()时,脚本的其余部分将立即停止。

现在,我只是在整个脚本中监听exit事件并注销回调。但是,这很繁琐且容易出错。

是否有更好的方法可以使脚本的其余部分立即停止,但仍然能够运行异步清理代码?

例如:

process.on('SIGINT', () => {
  Promise.race([
    Promise.all(
      process.listeners('beforeExit')
        .map(cb => cb())
        .filter(ret => ret instanceof Promise),
    ),
    pause(5000, new Error('_handleBeforeExit timed out.')),
  ])
    .catch((err) => {
      ErrorLogger.fatal(err, '_handleBeforeExit');
    })
    .then(() => ErrorLogger.shutdown(2000))
    .finally(() => process.exit());
});

...

// Random part of the script
ws.on('msg', () => doSomething);

...

// Another random part
if (!someCondition) {
  process.emit('SIGINT'); // Here, I want doSomething to never run again without having to manually unregister everything
  return;
}

0 个答案:

没有答案