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));
});
};
}
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!
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);
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:
et j'ai résolu le problème en écrivant à la place: