【问题标题】:How to reject fetch promise in redux如何在redux中拒绝获取承诺
【发布时间】:2016-07-11 22:04:33
【问题描述】:

您好,我是这样使用 fetch 的:

export function fetchSomething() {
  return ({fetch}) => ({
    type: FETCH_SOMETHING,
    payload: {
      promise: fetch('/someUrl', {
        credentials: 'same-origin',
      }).then(response => response.json())
      .then(function(response) {
        if (response.status >= 400)
        {
          let error = new Error(response.statusText);
          throw error;
        }

        return response;
      })
    }
  });
}

如果该 fetch 返回无效的 json,则整个 Promise 将被拒绝并调度 _ERROR 操作 - 不会抛出异常。它不会发出异常,而是发出 PromiseRejectionEvent。

但是,如果响应代码 >= 400,则会引发异常并调度 _ERROR 操作。

如何在检查状态代码时发出该事件并拒绝承诺而不引发异常?

谢谢

【问题讨论】:

    标签: reactjs redux isomorphic-fetch-api


    【解决方案1】:

    好的,我发现了问题。我正在使用Bluebirdjs 而不是默认浏览器 Promise。

    对于 fetch 我使用的是isomorphic-fetch,它使用了他们自己的 Promise 库,所以即使我已经注册了:

    window.Promise = require('../common/configureBluebird');
    

    isomorphic-fetch 使用了不同的东西。 所以我切换到fetch-ponyfill,它默认使用 window.Promise 作为 Promise,现在它正在工作。

    所以如果我在 then() 中抛出 new Error(),它会自动捕获并发出事件PromiseRejectionEvent

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 2016-07-08
      • 2021-08-10
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多