0

こんにちは、私はこのようにフェッチを使用しています:

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 アクションもディスパッチされます。

例外をスローせずにステータスコードをチェックするときに、そのイベントを発行して約束を拒否するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

わかりました、問題が見つかりました。デフォルトのブラウザ Promise の代わりにBluebirdjsを使用しています。

そしてフェッチのために、私は独自のPromiseライブラリを使用するisomorphic-fetchを使用していたので、登録したとしても:

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

isomorphic-fetch は別のものを使用しました。そこで、デフォルトで window.Promise を Promise として使用するfetch-ponyfillに切り替えましたが、現在は機能しています。

したがって、then() で new Error() をスローすると、自動的にキャッチされ、イベントPromiseRejectionEventが発行されます。

于 2016-07-11T14:04:33.963 に答える