即使我确实处理了未兑现的承诺拒绝

摩西

我将request-promise-native调用包装在返回诺言的函数中。

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如果我改变了return语句中catchrequestWrapper这样:

.catch(err => err)

甚至这个:

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

返回一个resolve,我得到了错误堆栈then中的requestWrapper,就像预期的呼叫。

节点大喊:

(node:24260) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): ...
摩西

好的,感谢@pathurs和@Hendry,我得到了我所需要的。

首先,正确的方法是@Hendry建议的方法,即不要在包装器中处理捕获,而在函数调用中处理。这是我走的路:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章