Heim > Web-Frontend > js-Tutorial > So erkennen Sie Fehler mit Abrufversprechen: Warum funktioniert die bedingte Ablehnung nicht?

So erkennen Sie Fehler mit Abrufversprechen: Warum funktioniert die bedingte Ablehnung nicht?

DDD
Freigeben: 2024-11-13 03:36:02
Original
338 Leute haben es durchsucht

How to Catch Errors with Fetch Promises: Why Conditional Rejection Doesn't Work?

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;
}
Nach dem Login kopieren

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);
    });
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage