最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 3浏览 0评论

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

在理解节点进程和承诺链的交互时遇到问题:

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

最后介绍了关闭doSomethingAsync()内部打开的数据库连接。

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

  • .catch()中,因为那是错误发生的地方,或者
  • .finally(),因为这是应该发生的最后一件事? (但如果出现错误并且触发了catch(),那么连接是否会被释放)?
  • 无处,因为节点已经知道程序失败了?
回答如下:

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

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

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

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

在理解节点进程和承诺链的交互时遇到问题:

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

最后介绍了关闭doSomethingAsync()内部打开的数据库连接。

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

  • .catch()中,因为那是错误发生的地方,或者
  • .finally(),因为这是应该发生的最后一件事? (但如果出现错误并且触发了catch(),那么连接是否会被释放)?
  • 无处,因为节点已经知道程序失败了?
回答如下:

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

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

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

发布评论

评论列表 (0)

  1. 暂无评论