【问题标题】:What is the correct way to propagate an exception from async function? [duplicate]从异步函数传播异常的正确方法是什么? [复制]
【发布时间】:2018-07-19 02:24:07
【问题描述】:

我有一个失败的异步函数:

async function main() {
    // fails
    throw 'some error';
}

main();

传播此异常以结束程序执行的正确方法是什么?

这是:

main().catch(err => { console.log(err); process.exit(1); });

正确的方法还是有更好的模式?

【问题讨论】:

  • 我希望它作为一个未处理的异常来停止程序执行。好像main() 不是异步的并且从中抛出了异常。
  • 什么都不做会产生同样的结果,不是吗?
  • 在这种情况下,它会打印一条警告,指出不推荐使用未处理的承诺拒绝,并且程序以代码 0 退出(成功)
  • 那么您从未处理过拒绝,这就是警告。您很可能还有一些其他异步功能没有返回/等待。
  • 其实这个函数返回一个promise,你可以在调用函数中处理它。如果你想在 main 中记录一些东西或产生一种新类型的异常,你可以抛出那个。

标签: javascript node.js


【解决方案1】:

有一个更好的方法: 您可以像这样收听“unhandledRejection”事件:

process.on('unhandledRejection', error => {
     console.log('unhandledRejection', error) //if you want to log the error
     process.exit(1);
});

这样做,您不必捕获所有可能抛出的异步函数。如果 catch 函数出现错误,你会自救。

这将删除不需要的警告。

【讨论】:

    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多