Axios: 422-Antwort nicht zurückgewiesen

Erstellt am 22. Feb. 2017  ·  3Kommentare  ·  Quelle: axios/axios

Wir haben ein Projekt, das in vielen Teilen der Anwendung [email protected] verwendet (ein Upgrade auf 0.15.3 hat das Problem nicht behoben). In allen anderen Teilen der App können wir .catch() 422 Antwortcodes ausgeben. Kürzlich haben wir festgestellt, dass 1 Anfrage ein Promise löst, das eine 422-Antwort erhält. In allen anderen Teilen unserer Anwendung führt ein 422 dazu, dass axios Promises abgelehnt werden.

export function addTool(name: string): Thunk {
  return (dispatch, getState) => {
    Axios
      .post<Tool>(API.current.toolsPath, { name })
      .then(resp => {
        if (resp instanceof Error) { throw resp; }
        success("Tool has been saved.", "Success");
        dispatch(addToolOk(resp.data));
      })
      .catch((e: Error) => {
        dispatch(addToolNo(e));
        error(prettyPrintApiErrors(e));
      });
  };
}

Quellcode hier

Ich konnte das Problem umgehen, indem ich die folgende Zeile zu meinem .then() hinzufügte:

if (resp instanceof Error) { throw resp; }

Was gut funktioniert, aber ich bin immer noch verwirrt darüber, warum dieser bestimmte 422 gelöst (und nicht abgelehnt) wird. Wir haben auch einige Abfangjäger im Einsatz, aber sie haben keine Probleme für die anderen Anfragen verursacht, die wir stellen.

Gibt es irgendwelche Umstände, die dazu führen würden, dass Axios einen 422 auflöst, anstatt ihn abzulehnen? Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Danke für die Hilfe!

Hilfreichster Kommentar

Nachdem ich dieses Problem untersucht hatte, stellte ich fest, dass es sich tatsächlich um einen lokalen Typfehler handelte, der irgendwo tief in der Aufrufliste versteckt war, was mich zu der Annahme veranlasste, dass es sich eher um ein lokales Problem als um ein Problem mit Axios handelt.

AKTUALISIEREN:

Nach einigen Nachforschungen konnte ich dies auf einen fehlerhaften "Antwort abgelehnt"-Interceptor zurückführen.

Innerhalb des Abfangjägers schrieb ich:

return error

und ich löste das Problem, indem ich stattdessen schrieb:

return Promise.reject(error);

Alle 3 Kommentare

Bestätigt. Ich sehe auch etwas Ähnliches, wenn ich Axios mit redux-saga verwende, wo einige 422er nicht als abgelehnte Versprechen behandelt werden.

Egal, habe mein Problem gefunden. Abfangjäger haben Fehler nicht richtig bis zur App-Schicht weitergegeben, d'oh! 😳

Nachdem ich dieses Problem untersucht hatte, stellte ich fest, dass es sich tatsächlich um einen lokalen Typfehler handelte, der irgendwo tief in der Aufrufliste versteckt war, was mich zu der Annahme veranlasste, dass es sich eher um ein lokales Problem als um ein Problem mit Axios handelt.

AKTUALISIEREN:

Nach einigen Nachforschungen konnte ich dies auf einen fehlerhaften "Antwort abgelehnt"-Interceptor zurückführen.

Innerhalb des Abfangjägers schrieb ich:

return error

und ich löste das Problem, indem ich stattdessen schrieb:

return Promise.reject(error);
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen