无法捕获来自 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 链中(也就是不 await
ing 它):
async makeAsyncCall(data) {
Promise.reject("Possible");
}
所以是的,您正在使用的库应该等待那个分离的承诺,或者它应该附加一个错误处理程序到它(并处理/故意忽略错误)。这不是你的错。
我正在使用第 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 链中(也就是不 await
ing 它):
async makeAsyncCall(data) {
Promise.reject("Possible");
}
所以是的,您正在使用的库应该等待那个分离的承诺,或者它应该附加一个错误处理程序到它(并处理/故意忽略错误)。这不是你的错。