Axios: 422 réponse non rejetée

Créé le 22 févr. 2017  ·  3Commentaires  ·  Source: axios/axios

Nous avons un projet qui utilise [email protected] (la mise à niveau vers 0.15.3 n'a pas résolu le problème) dans de nombreuses parties de l'application. Dans toutes les autres parties de l'application, nous pouvons .catch() 422 codes de réponse. Récemment, nous avons remarqué qu'une requête résout une promesse qui reçoit une réponse 422. Dans toutes les autres parties de notre application, un 422 provoque le rejet des promesses axios.

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));
      });
  };
}

Code source ici

J'ai pu contourner le problème en ajoutant la ligne suivante à mon .then() :

if (resp instanceof Error) { throw resp; }

Ce qui fonctionne bien, mais je ne comprends toujours pas pourquoi ce 422 particulier est résolu (plutôt que rejeté). Nous utilisons également des intercepteurs , mais ils n'ont causé aucun problème pour les autres requêtes que nous faisons.

Y a-t-il des circonstances qui amèneraient axios à résoudre un 422 plutôt que de le rejeter ? S'il vous plaît laissez-moi savoir si vous avez besoin d'autres informations.

Merci pour l'aide!

Commentaire le plus utile

Après avoir enquêté sur ce problème, j'ai découvert qu'il s'agissait en fait d'une erreur de type locale cachée profondément dans la pile d'appels quelque part, ce qui m'a amené à croire qu'il s'agissait d'un problème local plutôt que d'un problème avec Axios.

METTRE À JOUR:

Après quelques recherches, j'ai pu identifier cela à un mauvais intercepteur "réponse rejetée".

Dans l'intercepteur, j'ai écrit:

return error

et j'ai résolu le problème en écrivant à la place:

return Promise.reject(error);

Tous les 3 commentaires

Confirmé. Je vois également quelque chose de similaire lors de l'utilisation d'axios avec redux-saga où certains 422 ne sont pas traités comme une promesse rejetée.

Ce n'est pas grave, j'ai trouvé mon problème. Les intercepteurs ne propageaient pas correctement les erreurs jusqu'à la couche d'application, d'oh ! 😳

Après avoir enquêté sur ce problème, j'ai découvert qu'il s'agissait en fait d'une erreur de type locale cachée profondément dans la pile d'appels quelque part, ce qui m'a amené à croire qu'il s'agissait d'un problème local plutôt que d'un problème avec Axios.

METTRE À JOUR:

Après quelques recherches, j'ai pu identifier cela à un mauvais intercepteur "réponse rejetée".

Dans l'intercepteur, j'ai écrit:

return error

et j'ai résolu le problème en écrivant à la place:

return Promise.reject(error);
Cette page vous a été utile?
0 / 5 - 0 notes