• type {string} 错误类型。'resolve''reject' 之一。
    • promise {Promise} 不止一次'resolve''reject'的 Promise。
    • value {any} 在原始解析后'resolve''reject'的 Promise 的值。

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

    • resolve不止一次。
    • reject不止一次。
    • resolve后reject。
    • reject后resolve。

    这对于在使用 Promise 构造函数时跟踪应用程序中的潜在错误非常有用,因为会以静默方式吞没多个解决。 但是,此事件的发生并不一定表示错误。 例如,[Promise.race()] 可以触发 'multipleResolves' 事件。

    1. process.on('multipleResolves', (type, promise, reason) => {
    2. console.error(type, promise, reason);
    3. setImmediate(() => process.exit(1));
    4. });
    5. async function main() {
    6. try {
    7. return await new Promise((resolve, reject) => {
    8. resolve('第一次调用');
    9. resolve('吞没解决');
    10. reject(new Error('吞没解决'));
    11. });
    12. } catch {
    13. throw new Error('失败');
    14. }
    15. }
    16. main().then(console.log);
    17. // resolve: Promise { '第一次调用' } '吞没解决'
    18. // reject: Promise { '第一次调用' } Error: 吞没解决
    19. // at Promise (*)
    20. // at new Promise (<anonymous>)
    21. // at main (*)
    22. // 第一次调用