Node.js process multipleResolves 事件

🌙
手机阅读
本文目录结构

Node.js process multipleResolves 事件

新增于: v10.12.0

  • type < string> 错误类型。‘resolve’ 或 ‘reject’ 之一。
  • promise 不止一次解决或拒绝的 Promise。
  • value < any> 在原始解析后解决或拒绝的 Promise 的值。

只要 Promise 有以下情况,就会触发 ‘multipleResolves’ 事件:

  • 解决不止一次。
  • 拒绝不止一次。
  • 解决后拒绝。
  • 拒绝后解决。

这对于在使用 Promise 构造函数时跟踪应用程序中的错误很有用。 否则,由于处于死区,这些错误会被默默地吞没。

建议结束此类错误的进程,因为该进程可能处于未定义状态。 使用 Promise 构造函数时,请确保每次调用时确保触发 resolve() 或 reject() 函数,并且永远不会在同一个调用中同时调用这两个函数。

process.on('multipleResolves', (type, promise, reason) => {
  console.error(type, promise, reason);
  setImmediate(() => process.exit(1));
});

async function main() {
  try {
    return await new Promise((resolve, reject) => {
      resolve('第一次调用');
      resolve('吞没解决');
      reject(new Error('吞没解决'));
    });
  } catch {
    throw new Error('失败');
  }
}

main().then(console.log);
// resolve: Promise { '第一次调用' } '吞没解决'
// reject: Promise { '第一次调用' } Error: 吞没解决
//     at Promise (*)
//     at new Promise (<anonymous>)
//     at main (*)
// 第一次调用

更多内容请参考:Node.js process 进程,或者通过 点击对应菜单 进行查看;



AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

目前重心已经放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>