0

您好,我使用 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 操作。

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

谢谢

4

1 回答 1

1

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

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

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

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

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

于 2016-07-11T14:04:33.963 回答