javascript - 覆盖 JS 中的获取方法并转发 Promises

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

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

  • 将原来的 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); });
}

但我觉得它不干净。我想看看我是否可以找到一个直接替换原始 fetch 的地方,其中 Promises 被正确传递。

如果有任何帮助,我将不胜感激!

最佳答案

如果您知道它会返回一个 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 => ...)

关于javascript - 覆盖 JS 中的获取方法并转发 Promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39456044/

相关文章:

javascript - 如何保存应用了 CSS 滤镜的图像

javascript - 如何在客户端处理多个请求/API 调用并行的 JWT 刷新 token ?

javascript - 为什么 ECMASCRIPT 6 在解构时反转分配的边?

php - PDO 将信息从一个数据库插入到另一个数据库

javascript - 表单提交 404 未找到错误

javascript 获取 img 元素的完整 src url

javascript - 如何在 javascript 中获取响应 header 值?

mysql - 从 MySQL 表中获取具有不同关系的对象的值 : several queries or one?

javascript - 使用解构 JavaScript 从数组对象中获取数组值

javascript - 添加对象数组javascript的值