如何解决即使抛出错误,异步函数也不会以代码0退出
有没有人知道如果抛出错误,如何用非零退出代码退出异步函数?
如果同步函数引发错误,则NodeJS脚本会退出并显示错误代码:
sync.js :
'use strict'
const main = function () {
throw Error('Something failed hard')
}
main()
$ node sync.js
> ... Error: Something failed hard ...
$ echo $?
> 130
但是如果我对异步函数执行相同的操作,则错误代码始终为0
:
async.js :
'use strict'
const main = async function () {
throw Error('Something failed hard')
}
main()
$ node async.js
> ... UnhandledPromiseRejectionWarning: Error: Something failed hard ...
$ echo $?
> 0
我最能做的是:
async2.js :
'use strict'
const main = async function () {
process.exit(1)
throw Error('Something failed hard')
}
main()
$ node async2.js
$ echo $?
> 1
但是由于脚本已经退出了,所以不会抛出错误:-P
我正在使用Node 12.8.3。
我猜想脚本不会等到承诺被拒绝才退出。但是我不知道如何使异步功能等待,因为我不能在功能之外使用await
:-P
解决方法
我发现您不需要使用process.exit(<code>)
,但是可以使用process.exitCode = <code>
设置脚本退出时将使用的退出代码。
这可行:
'use strict'
const main = async function () {
process.exitCode = 1
throw Error('Something failed hard')
}
main()
$ node async3.js
> ... UnhandledPromiseRejectionWarning: Error: Something failed hard ...
$ echo $?
> 1
感谢大家成为我的橡皮鸭!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。