无法捕获来自 3rd 方库的未处理的 Promise 拒绝

Can't catch an unhandled Promise rejection from 3rd party library

我正在使用第 3 个部分库在我的 nodejs 后端代码中进行异步调用。这个电话有一个未处理的承诺拒绝,我很难捕捉到。 (它降低了我的节点应用程序。)

根据传递的输入,预计有时会失败:

exports.getSomeData = (input) => {
    console.log('GETTING DATA...')
    return ThirdPartyLib.makeAsyncCall(input).then((result) => {
        console.log('SUCCESS');
        return result;
    },(rejection) => {
        console.log('REJECTED');
        return {};
    }).catch(error => {
        console.log('ERROR');
        return {};
    });
}

但是 REJECTED/ERROR 消息中的 none 在失败时打印。我刚刚看到来自 lib 的控制台消息:Unhandled rejection at: Promise 并且我的应用程序出现故障。

我在处理不愉快路径的方式上是否遗漏了什么?

库代码是否有可能做一些上面不会捕捉到的事情?

除了双重拒绝处理程序(毫无意义,只需使用 catch()),您的代码应该可以正常工作。

鉴于您看到了该错误,这意味着您使用的库存在错误。

Is it possible for the library code to do something that the above WOULDN'T catch?

当然,它只需要创建一个 Promise(例如通过调用异步函数)而不将其链接到 promise 链中(也就是不 awaiting 它):

  async makeAsyncCall(data) {
    Promise.reject("Possible");
  }

所以是的,您正在使用的库应该等待那个分离的承诺,或者它应该附加一个错误处理程序到它(并处理/故意忽略错误)。这不是你的错。