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

时间:2016-09-12 17:54:42

标签: javascript ecmascript-6 fetch isomorphic-fetch-api

我想覆盖isomorphic-fetchfetch()方法,以便在发送此请求之前调用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的原始获取的替代品。

我非常感谢任何帮助!

1 个答案:

答案 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 => ...)