我在一个返回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
答案 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; }
:
每当检测到可能未处理的拒绝时发出。 使用以下参数发出此事件:
理由拒绝承诺未经处理的拒绝承诺process
reason
怀疑自己遭受未经处理的拒绝的承诺。
p
了解更多信息Unhandled Rejection