将未等待的未处理的错误承诺转换为警告@processTicksAndRejections(由“then”中的抛出错误创建)

问题描述 投票:0回答:1

顶层不允许等待,我的期望是下面抛出的错误只会被记录为警告,但事实证明它是完成的阻碍,即在语句

await fsProm.stat
后处理基本上停止。我不明白为什么?

const fsProm = require('fs').promises;

async function codeWithUnhandledPromise(){
    const notAwaited = Promise.resolve().then(function(){
        throw new Error('Irrelevant');
    });
    await fsProm.stat( __filename );
    console.log( 'Not reached' );
}
async function main(){
    try {
      await codeWithUnhandledPromise();
    } catch (error) {
      console.log( 'Not reached' );
    } finally {
      console.log( 'Not Reached' );
    }
}

main().then(undefined,function(){ 
    console.log( 'Not Reached' );
    return;
});
console.log( 'done' );
javascript node.js async-await promise
1个回答
0
投票

您没有看到

codeWithUnhandledPromise
的承诺的履行或拒绝的原因是 Node.js 现在会终止未处理的拒绝的流程。您可以使用
--unhandled-rejections
命令行标志
来修改该行为。

多年来,Node.js 的各个版本都警告说,在未来的某个版本中,未处理的拒绝会导致程序终止。例如,如果您使用 Node.js v14 运行该代码,您会收到此警告:

[DEP0018] DeprecationWarning:未处理的承诺拒绝已被弃用。将来,未处理的 Promise 拒绝将会以非零退出代码终止 Node.js 进程。

它不再是警告(除非您再次启用它)。标准行为现在与未处理的异常一致:它们终止程序。

© www.soinside.com 2019 - 2024. All rights reserved.