【问题标题】:Can I get the future unhandled promise rejection behaviour now?我现在可以得到未来未处理的承诺拒绝行为吗?
【发布时间】:2021-09-01 20:47:10
【问题描述】:

将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

我的管道在它应该失败并部署了一个在启动时崩溃的版本时通过了。如果 Node.js 以非零退出代码退出,则管道将失败并且不会部署错误版本。

有没有办法让 Node.js 在遇到未处理的承诺拒绝时以非零退出代码退出,而不需要我等待未来?

【问题讨论】:

标签: javascript node.js promise unhandled


【解决方案1】:

对于node 12 及更高版本:

node --unhandled-rejections=strict

【讨论】:

    【解决方案2】:

    是的,你可以,使用the unhandledRejection event on the process object

    process.on('unhandledRejection', (reason, p) => {
      console.error('Unhandled Rejection at:', p, 'reason:', reason)
      process.exit(1)
    });
    

    【讨论】:

    • 管道的每个部分都有不同的入口点,所以我必须在任何地方添加它。忘记这一点的风险与忘记放置 catch 块的风险相同,这是最初的问题。我希望有一个标志,比如--exit-on-unhandled-promise-rejections 甚至--exit-on-warnings,但我没有找到类似的东西。我仍然需要记住添加标志,但由于这是在一个地方完成的 (package.json),所以更容易记住。
    • 你可以把它放在一个文件中(比如handle_promise_rejections.js)并使用node -r ./handle_promise_rejections.js <your_script.js>来预加载它。
    • 美丽 - 感谢您的回答
    【解决方案3】:

    我喜欢通过环境变量设置这些选项:

    export NODE_OPTIONS="--unhandled-rejections=strict"
    

    【讨论】:

      【解决方案4】:

      您也可以在项目根目录中添加一个 .npmrc 文件。 将以下内容放入文件中:

      node-options="--unhandled-rejections=strict"
      

      每次执行 npm 命令时,都会为文件解析目录并读取文件中的选项。

      【讨论】:

        猜你喜欢
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        • 2018-03-31
        • 2023-03-17
        • 2018-04-01
        相关资源
        最近更新 更多