即使我处理它,未处理的承诺拒绝

时间:2018-01-23 09:21:21

标签: javascript promise request

我在一个返回promise的函数中包含了一个import request from 'request-promise-native'; function requestWrapper(url) { return request(url) .then(data => {...}) .catch(err => Promise.reject(err)); } 调用。

then

简单吧?

现在我正在使用此功能,catch工作正常,但Promise.reject从未捕获requestWrapper('http://some-url.com') .then(data => {...}) .catch(err => console.log(err));

catch

我从未接听过电话catch! 如果我将requestWrapper .catch(err => err) 中的return语句更改为:

.catch(err => Promise.resolve(err))

甚至是这样:

resolve

要返回then,我会按照预期在requestWrapper来电的(node:24260) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): ... 收到错误信息。

节点喊叫:

Matrix.fromTriangles( t1, t2 ); // returns matrix needed to produce t2 from t1

2 个答案:

答案 0 :(得分:1)

好的,谢谢@pathurs和@Hendry,我得到了我需要的东西。

首先,正确的方法是@Hendry建议哪些不处理包装器中的catch,而不是函数调用。这就是我的方式:

function requestWrapper(url) {
    return request(url)
        .then(data => {...})
}
requestWrapper('http://some-url.com')
    .then(data => {...})
    .catch(err => console.log(err));

大! 但显然,@ pathurs方式也有效:

function requestWrapper(url) {
        return request(url)
            .then(data => {...})
            .catch(err => Promise.reject(err));
    }
    requestWrapper('http://some-url.com')
        .then(data => {...}, err => console.log(err));

我不明白这是原生功能,还是request库的一些补充: https://github.com/request/request-promise#thenonfulfilled-onrejected

答案 1 :(得分:0)

如果你没有得到,那就做这个解决方法。

为了处理拒绝,将在Builder& typeName(Type val) { _typeName = val; return *this; }

上触发以下新事件

事件'unhandledRejection':

每当检测到可能未处理的拒绝时发出。 使用以下参数发出此事件:

理由拒绝承诺未经处理的拒绝承诺process reason怀疑自己遭受未经处理的拒绝的承诺。

p

了解更多信息Unhandled Rejection