覆盖 JS 中的获取方法并转发 Promises
Override fetch method in JS and forward Promises
我想覆盖 isomorphic-fetch 的 fetch()
方法,这样,就在发送此请求之前它调用 showLoader()
并在请求完成后调用 hideLoader()
.现在我想重写它,以便可以像原始获取方法一样链接新的获取方法。所以它应该 respect/forward 所有的 Promise。总之,我想:
- 将原来的
fetch()
覆盖为 fetchPlus(extraArg)
fetchPlus()
需要在调用 fetch()
之前和 fetch()
完成之后做额外的工作。
fetchPlus()
应该是原始 fetch()
用法的替代品
- 它应该支持链接,这样我就可以做:
fetchPlus(extraArg, originalArgs...).then(response => {...}).catch(error => {...});
我对 JS、React 和 Redux 还很陌生,所以如果我遗漏了一些明显的东西,请原谅。我确实阅读了 fetch()
并知道它 returns Promise 以便可以进一步传递响应或处理错误。我想出了一种丑陋的方法,我将 responseHandler 和 errorHandler 函数作为参数传递给 fetchPlus。
fetchPlus(extraArg, url, options, responseHandler, errorHandler) {
showLoader(extraArg);
fetch(url, options)
.then(response => {
hideLoader(extraArg);
responseHandler(response);
}.catch(error => { errorHandler(error); });
}
但我觉得它不干净。我想看看我是否可以找到一个直接替换原始 fetch 的地方,其中 Promises 被正确传递。
非常感谢任何帮助!
如果您知道它 return 是一个 Promise,那为什么不直接 return?
fetchPlus(extraArg, url, options) {
showLoader(extraArg);
return fetch(url, options)
.then(response => {
hideLoader(extraArg);
return response;
})
}
然后使用它:
fetchPlus(extraArg, url, options)
.then(response => ...)
.catch(error => ...)
我想覆盖 isomorphic-fetch 的 fetch()
方法,这样,就在发送此请求之前它调用 showLoader()
并在请求完成后调用 hideLoader()
.现在我想重写它,以便可以像原始获取方法一样链接新的获取方法。所以它应该 respect/forward 所有的 Promise。总之,我想:
- 将原来的
fetch()
覆盖为fetchPlus(extraArg)
fetchPlus()
需要在调用fetch()
之前和fetch()
完成之后做额外的工作。fetchPlus()
应该是原始fetch()
用法的替代品
- 它应该支持链接,这样我就可以做:
fetchPlus(extraArg, originalArgs...).then(response => {...}).catch(error => {...});
我对 JS、React 和 Redux 还很陌生,所以如果我遗漏了一些明显的东西,请原谅。我确实阅读了 fetch()
并知道它 returns Promise 以便可以进一步传递响应或处理错误。我想出了一种丑陋的方法,我将 responseHandler 和 errorHandler 函数作为参数传递给 fetchPlus。
fetchPlus(extraArg, url, options, responseHandler, errorHandler) {
showLoader(extraArg);
fetch(url, options)
.then(response => {
hideLoader(extraArg);
responseHandler(response);
}.catch(error => { errorHandler(error); });
}
但我觉得它不干净。我想看看我是否可以找到一个直接替换原始 fetch 的地方,其中 Promises 被正确传递。
非常感谢任何帮助!
如果您知道它 return 是一个 Promise,那为什么不直接 return?
fetchPlus(extraArg, url, options) {
showLoader(extraArg);
return fetch(url, options)
.then(response => {
hideLoader(extraArg);
return response;
})
}
然后使用它:
fetchPlus(extraArg, url, options)
.then(response => ...)
.catch(error => ...)