Axios: 422 respuesta no rechazada

Creado en 22 feb. 2017  ·  3Comentarios  ·  Fuente: axios/axios

Tenemos un proyecto que usa [email protected] (la actualización a 0.15.3 no resolvió el problema) en muchas partes de la aplicación. En todas las demás partes de la aplicación, podemos .catch() 422 códigos de respuesta. Recientemente notamos que 1 solicitud está resolviendo una promesa que recibe una respuesta 422. En todas las demás partes de nuestra aplicación, un 422 hace que se rechacen las promesas de 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));
      });
  };
}

código fuente aquí

Pude solucionar el problema agregando la siguiente línea a mi .then() :

if (resp instanceof Error) { throw resp; }

Lo cual funciona bien, pero todavía estoy confundido en cuanto a por qué se resuelve este 422 en particular (en lugar de rechazarlo). También tenemos algunos interceptores en uso, pero no han causado ningún problema con las otras solicitudes que hacemos.

¿Hay alguna circunstancia que haga que axios resuelva un 422 en lugar de rechazarlo? Por favor, hágamelo saber si necesita cualquier otra información.

¡Gracias por la ayuda!

Comentario más útil

Después de investigar este problema, descubrí que en realidad era un error de tipo local oculto en algún lugar de la pila de llamadas, lo que me llevó a creer que se trata de un problema local en lugar de un problema con Axios.

ACTUALIZAR:

Después de investigar un poco, pude atribuir esto a un interceptor de "respuesta rechazada" incorrecto.

Dentro del interceptor escribí:

return error

y resolví el problema escribiendo en su lugar:

return Promise.reject(error);

Todos 3 comentarios

Confirmado. También veo algo similar cuando uso axios con redux-saga donde algunos 422 no se manejan como una promesa rechazada.

No importa, encontré mi problema. Los interceptores no estaban propagando correctamente los errores hasta la capa de la aplicación, ¡oh! 😳

Después de investigar este problema, descubrí que en realidad era un error de tipo local oculto en algún lugar de la pila de llamadas, lo que me llevó a creer que se trata de un problema local en lugar de un problema con Axios.

ACTUALIZAR:

Después de investigar un poco, pude atribuir esto a un interceptor de "respuesta rechazada" incorrecto.

Dentro del interceptor escribí:

return error

y resolví el problema escribiendo en su lugar:

return Promise.reject(error);
¿Fue útil esta página
0 / 5 - 0 calificaciones