当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Node.js proces 'multipleResolves'事件用法及代码示例

事件:'multipleResolves'

添加于:v10.12.0自以下版本弃用:v17.6.0
Stability: 0 - 已弃用

参数
  • type <string> 分辨率类型。 'resolve''reject' 之一。
  • promise <Promise> 多次解决或拒绝的承诺。
  • value <any> 在原始解析后,promise 被解析或拒绝的值。

每当 Promise 出现以下任一情况时,都会发出 'multipleResolves' 事件:

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

这对于在使用 Promise 构造函数时跟踪应用程序中的潜在错误很有用,因为多个分辨率会被默默吞下。但是,此事件的发生并不一定表示错误。例如, Promise.race() 可以触发 'multipleResolves' 事件。

由于在上面的 Promise.race() 示例等情况下事件的不可靠性,它已被弃用。

import process from 'node:process';

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('First call');
      resolve('Swallowed resolve');
      reject(new Error('Swallowed reject'));
    });
  } catch {
    throw new Error('Failed');
  }
}

main().then(console.log);
// resolve: Promise { 'First call' } 'Swallowed resolve'
// reject: Promise { 'First call' } Error: Swallowed reject
//     at Promise (*)
//     at new Promise (<anonymous>)
//     at main (*)
// First callconst process = require('node:process');

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('First call');
      resolve('Swallowed resolve');
      reject(new Error('Swallowed reject'));
    });
  } catch {
    throw new Error('Failed');
  }
}

main().then(console.log);
// resolve: Promise { 'First call' } 'Swallowed resolve'
// reject: Promise { 'First call' } Error: Swallowed reject
//     at Promise (*)
//     at new Promise (<anonymous>)
//     at main (*)
// First call

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品  'multipleResolves'事件。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。