Fetch: lehnen Sie Versprechen und den Fehler abzufangen wenn der status nicht OK ist?
Hier ist, was ich haben möchte:
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;
}
EDIT: Das Versprechen, nicht wieder abgewiesen werden, das ist, was ich versuche, herauszufinden.
Ich bin mit diesem Holen polyfill in Redux mit redux-promise-middleware.
- Sie werfen eine Ausnahme in
catch
aber nichtcatch
es. - Es geht um die
catch
(die fängt alle Ablehnungen in der ganzen Kette verbunden ist), aber diecatch
Rückruf nicht nichts Anfassen - nur rethrows der Fehler. Ersetzen Sie diethrow
mit einemconsole.error
oder so. - Der browser friert ein? Das definitiv, sollte nicht passieren.
- Danke Jungs, ich bin ein bisschen neu, das einfrieren wurde durch etwas anderes verursacht. Ich denke, das ist ein Problem für mich, denn die polyfill behandelt einen 404 als eine erfolgreiche Antwort. Ich habe ein wenig Mühe die Ablehnung der Versprechen, sobald ich herausfinden, dass es in Ordnung sein sollte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Holen verspricht nur ablehnen, mit einer TypeError-wenn ein Netzwerkfehler Auftritt. Da die 4xx-und 5xx-Antworten nicht Netzwerk Fehler, es gibt nichts zu fangen. Sie müssen zu werfen ist ein Fehler sich selbst zu verwenden
Promise#catch
.Einen fetch-Antwort bequem versorgt ein
ok
, der Ihnen sagt, ob die Anfrage erfolgreich war. So etwas sollte den trick tun:503 Service Temp. Unavailable
wenn das Ergebnis eines abgelehnten Versprechen ist einTypeError
?Danke für die Hilfe, die jeder, der Ablehnung der Verheißung in
.catch()
mein Problem gelöst:function status(res) { if (!res.ok) { return Promise.reject(res.statusText); } return res; }
Oder wirklich Sie könnte ablehnen, die Versprechen, mit der Nachricht gegeben, von Ihrem Endpunkt.Ich habe gerade überprüft den status der Antwort-Objekt: