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 fetch
、err.response
プロパティは未定義です。
私の質問は、エラーを処理してステータス コードとステータス テキストを取得する方法などです。