1

reason-react-exampleリポジトリのフェッチ例で失敗した http 応答を処理する方法を理解しようとしています。

以下は私の最初のアイデアでした(URLをいじっています):

Js.Promise.(
          Fetch.fetch("https://dog.ceo/api/breeds/list")
          |> then_(res => {
               let ok = Fetch.Response.ok(res);
               ok ?
                 Fetch.Response.json(res) :
                 Js.Exn.raiseError(Fetch.Response.statusText(res));
             })
          |> then_(json =>
               json
               |> Decode.dogs
               |> (dogs => self.send(DogsFetched(dogs)))
               |> resolve
             )
          |> catch(err => {
               Js.log(err);
               [%bs.raw {| console.log(err.response) |}]
               Js.Promise.resolve(self.send(DogsFailedToFetch));
             })
          |> ignore
        );

思ったように機能していません。たとえば、HTTP 要求が 404 で失敗すると、すぐに拒否されることがFetchわかります。これは、ブラウザーのフェッチ API の動作とは異なるため、予期していませんでした。さらに、errログに記録された場合TypeError: Failed to fetcherr.responseプロパティは未定義です。

私の質問は、エラーを処理してステータス コードとステータス テキストを取得する方法などです。

4

1 に答える 1