如何使用 Node.js 中的本机 Promise 全局处理异常?

2024-01-31

我知道怎么做处理承诺中的特定错误 https://stackoverflow.com/questions/21800010/how-do-i-handle-errors-with-promises但有时我的代码片段看起来像这样:

somePromise.then(function(response){
    otherAPI(JSON.parse(response));
});

有时,我会收到无效的 JSON,这会在以下情况下导致静默失败:JSON.parse throws。一般来说,我必须记住添加一个.catch我的代码中的每一个承诺的处理程序,当我不这样做时,我无法找到我忘记的地方。

如何在我的代码中找到这些被抑制的错误?


Edit

我们终于在 Node.js 15 中解决了这个问题,花了 5 年时间,但本机 Promise 拒绝现在的行为就像未捕获的异常 - 所以只需添加一个就可以了process.on('uncaughtException'处理程序。

在现代 Node.js 中

从 io.js 1.4 和 Node 4.0.0 开始,您可以使用process "unhandledRejection" event:

process.on("unhandledRejection", function(reason, p){
    console.log("Unhandled", reason, p); // log all your errors, "unsuppressing" them.
    throw reason; // optional, in case you want to treat these as errors
}); 

这结束了未处理的拒绝问题以及在代码中追踪它们的困难。

在旧版 NodeJS 中

这些事件尚未向后移植到旧版本的 NodeJS,而且也不可能向后移植。您可以使用扩展原生 Promise API 的 Promise 库,例如bluebird https://www.npmjs.com/package/bluebird这将触发与现代版本中相同的事件。


还值得一提的是,有几个用户态承诺库提供未处理的拒绝检测设施以及更多,例如bluebird /questions/tagged/bluebird(其中也有警告)和when /questions/tagged/when.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Node.js 中的本机 Promise 全局处理异常? 的相关文章

随机推荐

  • Python-评估字符串中的数学表达式[重复]

    这个问题在这里已经有答案了 我有一个关于字符串内数学表达式求值的问题 例如我的字符串如下 my str I have 6 2 3 apples 我想知道如何评估这个字符串并得到以下结果 I have 30 apples 有什么办法可以做到这
  • “调用目标已引发异常”错误 (mscorlib)

    我有一个用 ASP Net 2 0 开发的网站 抛出错误 Exception has been thrown by the target of an invocation 在生产环境中 它并没有在开发中抛出这个错误 源是 mscorlib
  • C++ 迭代器和循环优化

    我看到很多 C 代码看起来像这样 for const iterator it list begin const iterator ite list end it ite it 与更简洁的版本相反 for const iterator it
  • 将 bsTooltip 框的颜色更改为闪亮

    是否可以通过以下方式来设计工具提示框的美观性 bsTooltip闪亮的 我已经寻找答案 但就工具提示而言 所有关于美观的调整似乎仅针对宽度 即这个问题 https stackoverflow com questions 58320525 s
  • CSS“下划线”文本部分

    如何为文本添加下划线以获得与 测试 下看到的相同效果 我尝试将 TEST 封装在span并添加绝对 after withposition absolute 但我认为这不是正确的方法 并没有得到预期的结果 这是 HTML h1 class w
  • 使用 getevent 在已 root 的 Android 手机上拒绝权限

    我有非常简单的代码如下 Override public void onClick View v Log i MyApp Started try Process processStart Runtime getRuntime exec su
  • 如何使用右/左在sqldf中分割变量,如left(x,n)

    R 中是否有不同的函数可以用来获得与 SQL 中左函数或右函数相同的结果 例如 以下 SQL 查询将给出列的前 6 个字符 select left x 6 from table 但是 当我在 sqldf 中尝试这样做时 如下所示 sqldf
  • 如何计算图像的直方图?

    我该如何解决以下错误 import cv2 img cv2 imread home monojit Desktop crop jpg hsv cv2 cvtColor img cv2 COLOR BGR2HSV hist cv2 calcH
  • R 是否有依赖于系统的功能?

    我的同事希望确保我们在 R 中的工作独立于平台 特别是代码可以在 Linux Mac 和 Windows 上运行 并且在一个系统上创建的文件可以在其他系统上运行 由于这个问题之前在我的团队中出现过 我希望得到一个笼统的答案 这将使我更容易自
  • 一段时间后,条形码扫描仪抛出 java.lang.UnsatisfiedLinkError

    我有一个使用新的 Android 视觉库的条形码扫描仪 它在我的设备和其他几个设备上完美运行 但突然它停止工作 我在日志中看到以下异常 No implementation found for com google android gms v
  • Unity中如何设置文本的字体大小?

    如何使标签中的字体变大 我用这个函数来显示文本 function OnGUI GUI color Color green GUI Label Rect 500 350 200 50 Lose 结果是 我怎样才能把这个文字变大 只需创建一个合
  • 如何从我的程序中列出 Internet Explorer 使用的插件 (BHO)?

    我需要在我的 Win32 独立程序中检索 当前安装的 Internet Explorer 加载项列表 浏览器帮助程序对象 以及 如果可能 它们的启用 禁用状态 由于反间谍软件程序 或例如Autoruns https technet micr
  • go lang中按不同维度对点(结构)进行排序

    我有一个 Points 类型的多维点列表 我已经实施了sort Sort界面 现在可以排序y value e g type Points Point func points Points Len int return len points
  • 当视图不与模型交互时,这就是 MVC 吗?

    我设计了一个 MVC 在 NET 中 其中视图没有到模型的链接 它只知道控制器 传统的 MVC 模式的所有部分都相互通信 就我而言 控制器基本上是一个调解者 这会将任何异常或逻辑排除在视图之外 它对模型的依赖性为零 这不再是 MVC 了吗
  • 使用 Three.js 单击网格获取像素的颜色值

    我正在使用 Three js 的最新版本 我得到了一个带有 2D 网格和渐变颜色的场景 颜色取决于分配给每个顶点的值 我想通过用鼠标单击渐变的每个点来获取它的值 通过获取颜色 并对我的值进行一些数学计算 我尝试使用这样的系统 因为它在这里工
  • 使用toggleClass更改类后的jQuery事件

    我对 jQuery 和toggleClass 有疑问 我想创建一个 div 单击按钮即可关闭 按钮发生变化 当我再次单击此按钮时 div 将再次打开 问题是 当我单击按钮时 div 关闭并且按钮的类发生变化 这很好 但现在 当我单击新类的按
  • fread EOF 而不是分隔符

    我正在尝试用 fread 读取一个大文件 但我猜文件的布局有些混乱 如果我尝试读取文件 data fread input data txt sep t 在此文件上 我只是选择了有错误的行以及前后的一些内容 ID imdbID Title Y
  • 用 Python 封装旧版 Fortran。使用 setuptools 和 numpy.distutils 可以吗?

    我正在尝试为我的领域中一些流行的 Fortran 代码制作一个 python 包发行版 我希望它使用最标准的方法setup py文件 相关问题对学习有帮助如何包装 Fortran 扩展 https stackoverflow com que
  • 如何在新版Android Studio中添加classpath

    我将 android studio 版本更新为 bumblebee 版本 现在我想将导航组件添加到我的项目中 我想将类路径添加到 gradle 但是这个文件 gradle 已更改 我不知道如何添加它 我想添加这个 classpath and
  • 如何使用 Node.js 中的本机 Promise 全局处理异常?

    我知道怎么做处理承诺中的特定错误 https stackoverflow com questions 21800010 how do i handle errors with promises但有时我的代码片段看起来像这样 someProm