【发布时间】:2021-09-01 20:47:10
【问题描述】:
将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
我的管道在它应该失败并部署了一个在启动时崩溃的版本时通过了。如果 Node.js 以非零退出代码退出,则管道将失败并且不会部署错误版本。
有没有办法让 Node.js 在遇到未处理的承诺拒绝时以非零退出代码退出,而不需要我等待未来?
【问题讨论】:
标签: javascript node.js promise unhandled
将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
我的管道在它应该失败并部署了一个在启动时崩溃的版本时通过了。如果 Node.js 以非零退出代码退出,则管道将失败并且不会部署错误版本。
有没有办法让 Node.js 在遇到未处理的承诺拒绝时以非零退出代码退出,而不需要我等待未来?
【问题讨论】:
标签: javascript node.js promise unhandled
对于node 12 及更高版本:
node --unhandled-rejections=strict
【讨论】:
是的,你可以,使用the unhandledRejection event on the process object:
process.on('unhandledRejection', (reason, p) => {
console.error('Unhandled Rejection at:', p, 'reason:', reason)
process.exit(1)
});
【讨论】:
--exit-on-unhandled-promise-rejections 甚至--exit-on-warnings,但我没有找到类似的东西。我仍然需要记住添加标志,但由于这是在一个地方完成的 (package.json),所以更容易记住。
handle_promise_rejections.js)并使用node -r ./handle_promise_rejections.js <your_script.js>来预加载它。
我喜欢通过环境变量设置这些选项:
export NODE_OPTIONS="--unhandled-rejections=strict"
【讨论】:
您也可以在项目根目录中添加一个 .npmrc 文件。 将以下内容放入文件中:
node-options="--unhandled-rejections=strict"
每次执行 npm 命令时,都会为文件解析目录并读取文件中的选项。
【讨论】: