3

我想重写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 函数作为 args 传递给 fetchPlus。

fetchPlus(extraArg, url, options, responseHandler, errorHandler) {
    showLoader(extraArg);
    fetch(url, options)
    .then(response => {
        hideLoader(extraArg);
        responseHandler(response);
    }.catch(error => { errorHandler(error); });
}

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

我将非常感谢任何帮助!

4

1 回答 1

6

如果你知道它返回一个 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 => ...)
于 2016-09-12T18:03:22.733 回答