我们可能会得到错误原因或错误的堆栈(如果存在)以记录在日志(log)中,并在页面/控制台上显示等等,但如何使用传递给处理程序的Promise引用作为第二个参数?

process.on('unhandledRejection', (err, p) => {
  console.log(err); // "some reason"
  console.log(p); // Promise { <rejected> 'some reason' }
});

推荐答案

传入Promise引用,以便处理程序可以区分which个Promise被拒绝.错误本身对此没有帮助,事实上,您可能会因为同一个错误而拒绝多个不同的promise ,并且可能会从它们那里得到多个未经处理的拒绝.

现在Promise对象本身并不是特别有用,除了附加处理程序之外,您不能对它做很多事情-而且您已经知道它被拒绝了,并且使用了哪个值.在某些罕见的情况下,Promise可能是某个Promise子类的一个实例,它携带额外的数据,因此未经处理的拒绝在理论上可以使用它;但这是不寻常的.

更相关的是,Promise对象有一个标识,您可以用它来标识拒绝.这一点尤其与rejectionhandled event有关,它会告诉你,一个被拒绝的、未处理的promise 现在有了一个处理程序.您可以使用Promise作为标识符--例如,作为Map中的关键字--将其与之前的unhandledrejection相关联.

Javascript相关问答推荐

为什么我的useDispatch挂钩在这里设置不正确?

JavaScript替换子 node 导致它们更改为[对象HTMLTable SectionElement]

未使用Outlet渲染子组件

Vue-Router渲染组件但不更改网址

创建私有JS出口

无法将nPM simplex-noise包导入在JS项目中工作

通过在页面上滚动来移动滚动条

Promise Chain中的第二个useState不更新

获取Uint8ClampedArray中像素数组的宽度/高度

如何将Cookie从服务器发送到用户浏览器

如何使用子字符串在数组中搜索重复项

rxjs插入延迟数据

在Java中寻找三次Bezier曲线上的点及其Angular

Web Crypto API解密失败,RSA-OAEP

检索相加到点的子项

如何在箭头函数中引入or子句?

如何在DYGRAPS中更改鼠标事件和键盘输入

将多个文本框中的输出合并到一个文本框中

当我点击一个按钮后按回车键时,如何阻止它再次被点击

P5.js中矩形内的圆弧