我试图弄清楚如何在reason-react-example repo 的 fetch 示例中处理失败的 http 响应。
以下是我的第一个想法(修改网址):
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
属性未定义。
我的问题是:例如如何处理错误以获取状态代码和状态文本?