无法捕获来自第三方库的未处理的Promise拒绝

时间:2019-05-20 17:14:43

标签: javascript node.js promise es6-promise

我正在使用第3个parth库在我的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消息在失败时均不会打印。我刚刚从lib中看到一条控制台消息:Unhandled rejection at: Promise,我的应用程序关闭了。

我在处理不愉快的道路时是否缺少任何东西?

库代码是否有可能做上述无法捕捉的事情?

2 个答案:

答案 0 :(得分:2)

  

库代码是否有可能做上述无法捕捉的事情?

当然,它只需要创建一个Promise(例如,通过调用异步函数),而无需将其链接到Promise链中(也就是没有<div>a1</div> <div>a2</div> <div>a3</div> <div>a4</div> <div>a5</div> <div>a6</div> 链接到它):

await

所以是的,您正在使用的库应该等待分离的Promise,或者应该向其附加错误处理程序(并处理/故意忽略该错误)。这不是你的错。

答案 1 :(得分:1)

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

因此,如果您看到该错误,则意味着您使用的库存在错误。