这就是我要做的:
import 'whatwg-fetch';
function fetchVehicle(id) {
return dispatch => {
return dispatch({
type: 'FETCH_VEHICLE',
payload: fetch(`http://swapi.co/api/vehicles/${id}/`)
.then(status)
.then(res => res.json())
.catch(error => {
throw(error);
})
});
};
}
function status(res) {
if (!res.ok) {
return Promise.reject()
}
return res;
}
编辑:承诺不会被拒绝,这就是我想要弄清楚的。
我在 Redux 中使用这个 fetch polyfill 和 redux-promise-middleware 。
原文由 Vlady Veselinov 发布,翻译遵循 CC BY-SA 4.0 许可协议
Fetch Promise 仅在发生网络错误时以 TypeError 拒绝。由于 4xx 和 5xx 响应不是网络错误,因此没有什么可捕获的。您需要自己抛出错误才能使用
Promise#catch
。一个 fetch Response 方便地提供一个
ok
,它告诉你请求是否成功。这样的事情应该可以解决问题: