【发布时间】:2018-02-19 22:41:57
【问题描述】:
我试图弄清楚如何在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 属性未定义。
我的问题是:例如如何处理错误以获取状态代码和状态文本?
【问题讨论】:
标签: cors fetch-api reason bucklescript reason-react