我想覆盖isomorphic-fetch的fetch()
方法,以便在发送此请求之前调用showLoader()
,并在请求完成后调用hideLoader()
。现在我想覆盖它,以便新的fetch可以像原始的fetch方法一样被链接。所以它应该尊重/转发所有的承诺。总之,我想:
fetch()
覆盖为fetchPlus(extraArg)
fetchPlus()
需要在致电fetch()
之前和fetch()
完成之后完成其他工作。fetchPlus()
应该是原始fetch()
fetchPlus(extraArg, originalArgs...).then(response => {...}).catch(error => {...});
我是JS,React和Redux的新手,所以如果我错过了一些明显的东西,请原谅。我确实阅读了fetch()
,并知道它返回Promise,以便可以进一步传递响应或处理错误。我想出了一种丑陋的方式,我将responseHandler和errorHandler函数作为args传递给fetchPlus。
fetchPlus(extraArg, url, options, responseHandler, errorHandler) {
showLoader(extraArg);
fetch(url, options)
.then(response => {
hideLoader(extraArg);
responseHandler(response);
}.catch(error => { errorHandler(error); });
}
但我发现它并不干净。我想知道是否可以找到正确传递Promises的原始获取的替代品。
我非常感谢任何帮助!
答案 0 :(得分:4)
如果你知道它返回了一个Promise,那为什么不返回呢?
fetchPlus(extraArg, url, options) {
showLoader(extraArg);
return fetch(url, options)
.then(response => {
hideLoader(extraArg);
return response;
}
}
然后使用它:
fetchPlus(extraArg, url, options)
.then(response => ...)
.catch(error => ...)