覆盖 JS 中的 fetch 方法并转发 Promises

Man*_*ana 3 javascript fetch ecmascript-6 isomorphic-fetch-api

我想覆盖isomorphic-fetchfetch()方法,这样,就在发送此请求之前,它调用并在请求完成后调用. 现在我想覆盖它,以便可以像原始 fetch 方法一样链接新的 fetch。所以它应该尊重/转发所有的承诺。总之,我想:showLoader()hideLoader()

  • 覆盖原来的fetch()fetchPlus(extraArg)
  • fetchPlus()需要在调用之前fetch()fetch()完成之后做额外的工作。
  • fetchPlus() 应该是原始用法的替代品 fetch()
  • 它应该支持链接,以便我可以:

fetchPlus(extraArg, originalArgs...).then(response => {...}).catch(error => {...});

我对 JS、React 和 Redux 还很陌生,所以如果我错过了一些明显的东西,请原谅。我确实阅读fetch()并知道它返回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); });
}
Run Code Online (Sandbox Code Playgroud)

但我觉得不干净。我想看看我是否可以找到正确传递 Promise 的原始 fetch 的替代品。

我将不胜感激任何帮助!

azi*_*ium 6

如果你知道它返回一个 Promise,那为什么不直接返回呢?

fetchPlus(extraArg, url, options) {
    showLoader(extraArg);
    return fetch(url, options)
      .then(response => {
        hideLoader(extraArg);
        return response;
      })
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

fetchPlus(extraArg, url, options)
  .then(response => ...)
  .catch(error => ...)
Run Code Online (Sandbox Code Playgroud)