Fehler mit Abrufversprechen abfangen: Bedingte Ablehnung
In Redux-Anwendungen verwenden Entwickler häufig Abruf für asynchrone Anforderungen. Allerdings kann die Behandlung von Fehlern, wenn die Anfrage fehlschlägt, eine Herausforderung sein, insbesondere wenn die Anfrage einen Nicht-OK-Statuscode zurückgibt.
Beachten Sie den folgenden Codeausschnitt:
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; }
Das Ziel ist die Ablehnung das Versprechen und fängt den Fehler im Reduzierer ab, wenn der Statuscode nicht OK ist. Der Code funktioniert jedoch nicht wie vorgesehen: Das Versprechen wird nicht abgelehnt.
Abrufversprechen verstehen
Abrufversprechen werden nur dann mit einem TypeError abgelehnt, wenn ein Netzwerkfehler auftritt . Antworten mit 4xx- oder 5xx-Statuscodes gelten nicht als Netzwerkfehler, daher wird der Fehler nicht ausgelöst.
Benutzerdefinierte Fehler auslösen
Um diese Nicht-Netzwerkfehler abzufangen, Wir können manuell einen Fehler auslösen, wenn der Statuscode auf eine fehlgeschlagene Anfrage hinweist:
function fetchVehicle(id) { return fetch(`http://swapi.co/api/vehicles/${id}/`) .then(response => { if (!response.ok) { throw new Error('Something went wrong'); } return response.json(); }) .catch(error => { console.log(error); }); }
Wenn die Anfrage nun einen nicht-OK-Statuscode zurückgibt, wird der Fehlerhandler ausgelöst und die Fehlermeldung protokolliert. Der Reduzierer kann diesen Fehler dann entsprechend behandeln.
Das obige ist der detaillierte Inhalt vonSo erkennen Sie Fehler mit Abrufversprechen: Warum funktioniert die bedingte Ablehnung nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!