【发布时间】:2020-01-27 05:04:09
【问题描述】:
我有一个 400 返回一个包含我需要解决的错误的正文。但是,由于fetch 实际上并没有使该状态代码失败,我在then 中处理它并返回一个被拒绝的Promise。但是,因为then 通常会返回Promise,所以我不能在不等待json() 的响应的情况下发出reject。
dispatch({
type: 'LOGIN',
payload: fetch(`${host}/api/signin/`, {
method: 'POST',
body: data
}).then(async res => {
if (res.status >= 400) {
return Promise.reject(await res.json());
}
return await res.json();
})
});
有没有更好的方法来处理这个问题?它在技术上是可行的,但我觉得我可能通过使then 同步来处理它是错误的。
【问题讨论】:
-
就个人而言,我喜欢你的做法。
-
正常的过程是使用两个 .then 的,但我认为使用 async/await 组合它们没有真正的问题。
-
我在我的库中创建了一个函数,它用我自己的异步函数包装了 fetch,我在该函数中等待 fetch 本身,以完全避免
then。 -
为什么要拒绝>400?
-
我会推荐给avoid mixing
awaitwith.then(…)syntax 和avoidreturn await。还可以考虑使用response.ok而不是.status检查。
标签: javascript reactjs async-await