如何拒绝redux中的获取承诺

时间:2016-07-11 12:08:18

标签: reactjs redux isomorphic-fetch-api

您好我在这里使用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;
      })
    }
  });
}

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

但是,如果响应代码为> = 400,则抛出异常并调度_ERROR操作。

如何在不抛出异常的情况下检查状态代码时发出该事件并拒绝承诺?

由于

1 个答案:

答案 0 :(得分:1)

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

对于fetch,我使用isomorphic-fetch使用自己的Promise库,所以即使我已注册:

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

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

因此,如果我在then()中抛出新的Error(),它将自动捕获并发出事件PromiseRejectionEvent