在Promise链中调用process.exit()的正确位置

时间:2019-02-12 22:58:23

标签: node.js es6-promise

在理解节点流程和promise链的交互时遇到问题:

doSomethingAsync()
.then()
.then()
.catch()
.finally();

最后介绍了用来关闭在doSomethingAsync()中打开的数据库连接的方法。

问题:关于错误的process.exit(1)正确属于哪个块?

  • .catch()中,因为这是错误的根源,或者
  • .finally()中,既然这是应该发生的最后一件事? (但是,如果发生错误并且触发了catch(),连接是否被释放)?
  • 无处,因为节点已经知道程序失败了?

2 个答案:

答案 0 :(得分:1)

如果目标是在发生错误时终止应用程序,那么我根本不会捕获异常

async function doSomething() {
  try {
    const result = await doSomethingAsync();
    // do something with result  
  } finally {
    // do cleanup
  }
}

使用async / await语法将允许Promise引发错误,而未捕获的异常将终止应用程序。无论是否引发错误,finally块都会运行。

答案 1 :(得分:0)

在您的情况下,我认为process.exit(1)属于finally(),因为有一些数据库连接需要关闭。您可能需要先关闭它们,然后再执行process.exit(1)

如果没有逻辑要执行,我将在catch()中退出该过程。