我将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语句中catch
的requestWrapper
这样:
.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] 删除。
我来说两句