javascript - Node.js:停止执行除单个函数之外的所有代码?

标签 javascript node.js

是否可以停止执行除单个异步函数之外的所有 Node.js 代码?

有点像运行 process.exit(),但是 process.exit() 只允许同步功能。

即退出当前调用堆栈、清除消息队列、取消注册所有事件处理程序,然后运行单个异步函数的方法?

最佳答案

这是一个有趣的用例...您可以做的一件事是派生一个分离的 child_process 来为您处理异步清理。这样,您可以向子进程发送一条消息,提示它在触发父进程的 process.exit() 以停止其进程之前执行任何清理工作。 child 应该通过清空自己的事件循环自然退出,但我在清理代码中放了另一个 process.exit() 以防万一:

app.js

const { fork } = require('child_process');
const subProcess = fork(`${__dirname}/cleanup.js`, {
  detached: true
});

//ensure parent can exit independent of child
subProcess.unref();

setTimeout(() => {
  //do some standard node.js, async stuff
  //all done... send clean up message and exit parent
  subProcess.send({ exit: true });
  //disconnect to sever any further communication
  subProcess.disconnect()
  process.exit(1);
}, 5000)

cleanup.js

asyncCleanUp();

async function asyncCleanUp(){
  setTimeout(() => {
    console.log('async cleanup completed... exiting.')
  }, 5000)
  return 'done'
}

console.log('cleanup script forked');
process.on('message', async (message) => {
  console.log(message)
  if(message.exit) {
    const result = await asyncCleanUp();
    console.log(result);
    process.exit(1);
  }
});

关于javascript - Node.js:停止执行除单个函数之外的所有代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54858332/

相关文章:

javascript - 我可以用原型(prototype)函数简化它吗?

javascript - mootools $$ 的 jQuery 等价物

javascript - 我的Node.js请求页面中的所有数据都写为[object object]

node.js - 将 Node Inspector 与 Derby App 结合使用?

javascript - 长轮询服务器原理(客户端认证)

javascript - Uncaught TypeError : modal. on(...).trigger 在使用 Zurb Foundation 5.5.3 时不是函数?

javascript - 虚拟键盘建议 (JavaScript)

javascript - Chrome 扩展中的 TreeWalker

javascript - 推送后数组仍然为空

variables - Node.js 模块变量是否在多个调用之间共享?