在理解节点流程和promise链的交互时遇到问题:
doSomethingAsync()
.then()
.then()
.catch()
.finally();
最后介绍了用来关闭在doSomethingAsync()中打开的数据库连接的方法。
问题:关于错误的process.exit(1)
正确属于哪个块?
.catch()
中,因为这是错误的根源,或者.finally()
中,既然这是应该发生的最后一件事? (但是,如果发生错误并且触发了catch()
,连接是否被释放)?答案 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()
中退出该过程。