即使在捕获异常时也得到 UnhandledPromiseRejectionWarning
Getting UnhandledPromiseRejectionWarning even when catching exceptions
在 NodeJS 中,我有一些这样的代码:
function doSomethingAsync() {
return Promise.reject("error");
}
function main() {
doSomethingAsync().catch();
}
当我 运行 这段代码时,我得到一个 UnhandledPromiseRejectionWarning
。
我知道在 try
/catch
中调用函数 async
和 await
ing doSomethingAsync
会使错误消失,但是在这种情况下,我不想增加使函数异步和等待只是为了消除错误的额外复杂性,所以我更愿意使用 catch()
.
为什么我的错误处理方法没有消除错误?
.catch()
实际上并没有捕捉到任何东西。
如果我们看 docs:
Internally calls Promise.prototype.then
on the object upon which it was called, passing the parameters undefined
and the received onRejected
handler.
找到规格 here
如果我们再查看 Promise.then
的 docs,我们会发现:
onRejected
: A Function
called if the Promise
is rejected. This function has one argument, the rejection reason
. If it is not a function, it is internally replaced with a "Thrower" function (it throws an error it received as argument).
这样做 .catch()
实际上不会捕捉到任何东西,您的应用将继续抛出错误。您必须将函数传递给 catch()
.
这样做会消除错误:
doSomethingAsync().catch(() => { });
在 NodeJS 中,我有一些这样的代码:
function doSomethingAsync() {
return Promise.reject("error");
}
function main() {
doSomethingAsync().catch();
}
当我 运行 这段代码时,我得到一个 UnhandledPromiseRejectionWarning
。
我知道在 try
/catch
中调用函数 async
和 await
ing doSomethingAsync
会使错误消失,但是在这种情况下,我不想增加使函数异步和等待只是为了消除错误的额外复杂性,所以我更愿意使用 catch()
.
为什么我的错误处理方法没有消除错误?
.catch()
实际上并没有捕捉到任何东西。
如果我们看 docs:
Internally calls
Promise.prototype.then
on the object upon which it was called, passing the parametersundefined
and the receivedonRejected
handler.
找到规格 here
如果我们再查看 Promise.then
的 docs,我们会发现:
onRejected
: AFunction
called if thePromise
is rejected. This function has one argument, therejection reason
. If it is not a function, it is internally replaced with a "Thrower" function (it throws an error it received as argument).
这样做 .catch()
实际上不会捕捉到任何东西,您的应用将继续抛出错误。您必须将函数传递给 catch()
.
这样做会消除错误:
doSomethingAsync().catch(() => { });