即使在捕获异常时也得到 UnhandledPromiseRejectionWarning

Getting UnhandledPromiseRejectionWarning even when catching exceptions

在 NodeJS 中,我有一些这样的代码:

function doSomethingAsync() {
    return Promise.reject("error");
}

function main() {
    doSomethingAsync().catch();
}

当我 运行 这段代码时,我得到一个 UnhandledPromiseRejectionWarning

我知道在 try/catch 中调用函数 asyncawaiting 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.thendocs,我们会发现:

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(() => { });