javascript - 我如何从一个catch中抛出一个错误,而不将其变为UnhandledPromiseRejection

标签 javascript error-handling promise try-catch throw

如果我只是抛出一个随机错误,我的代码可以正常工作:

throw new Error('you got error')
但是如果我想从.catch语句中抛出它,就像这样:
message.react(e).catch(()=>{throw new Error('you got error')});
然后,我得到错误记录如下:(node:21609) UnhandledPromiseRejectionWarning: Error: you got error,并且没有被我的上层错误处理程序捕获:
//errors from within catch() don't reach this
process.on('uncaughtException', function(err){ console.log('error caught', err); });
我不想使用Promise,但是不幸的是,这是我没有选择的库中的内容。
我如何以一种不是未处理的 promise 拒绝的方式从异常中抛出异常?

最佳答案

如果您仅出于诊断目的而尝试记录未处理的 promise 拒绝,则可以执行以下操作:

process.on('unhandledRejection', (reason, promise) => {
    console.log('Unhandled Rejection at:', promise, 'reason:', reason);
  // Application specific logging, throwing an error, or other logic here
});
参见doc here
就像我之前说过的那样,这不应该是您实际处理 promise 拒绝的方式。应该将它们捕获在您自己的较低级别的代码中,在该代码中,您具有特定的创建错误的特定操作的上下文。该代码应该仅用于诊断调试,然后再在未处理的地方修复应处理的 promise 拒绝的实际代码。

关于javascript - 我如何从一个catch中抛出一个错误,而不将其变为UnhandledPromiseRejection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65101343/

相关文章:

javascript - 如何在 documentdb 中执行 Javascript

javascript - ```警报(`${info} : ${pokemondetails[info]}\n` )```是什么意思?

javascript - 如何使用 jquery 将 rgb 值转换为十六进制颜色?

c++ - 如何从 std::regex_error 获取解释性字符串?

sql - 大查询: converting a legacy sql request to a standard SQL request?

javascript - 如何使用 Protractor 遍历一组元素并测试它们是否可点击

node.js - 为什么我不能将 Promise.resolve 与渗透实例一起使用?

Angular:在 APP_INITIALIZER 中发送 http 请求之前加载配置文件

javascript - 动态加载 CSS 样式

swift - 将 ErrorType 转换为 NSError 会丢失关联对象