Axios: 422 resposta não rejeitada

Criado em 22 fev. 2017  ·  3Comentários  ·  Fonte: axios/axios

Temos um projeto que usa [email protected] (a atualização para 0.15.3 não resolveu o problema) em muitas partes do aplicativo. Em todas as outras partes do aplicativo, conseguimos .catch() 422 códigos de resposta. Recentemente, notamos que 1 solicitação está resolvendo uma promessa que obtém uma resposta 422. Em todas as outras partes do nosso aplicativo, um 422 faz com que o axios seja rejeitado.

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 fonte aqui

Consegui contornar o problema adicionando a seguinte linha ao meu .then() :

if (resp instanceof Error) { throw resp; }

O que funciona bem, mas ainda estou confuso sobre por que esse 422 específico foi resolvido (em vez de rejeitado). Também temos alguns interceptores em uso, mas eles não causaram nenhum problema para as outras solicitações que fazemos.

Existem circunstâncias que fariam com que o axios resolvesse um 422 em vez de rejeitá-lo? Por favor, deixe-me saber se você precisar de qualquer outra informação.

Obrigado pela ajuda!

Comentários muito úteis

Depois de investigar esse problema, descobri que, na verdade, era um erro de tipo local oculto na pilha de chamadas em algum lugar, levando-me a acreditar que é um problema local e não um problema com o Axios.

ATUALIZAR:

Depois de alguma investigação, consegui atribuir isso a um interceptador ruim de "resposta rejeitada".

Dentro do interceptor eu escrevi:

return error

e resolvi o problema escrevendo:

return Promise.reject(error);

Todos 3 comentários

Confirmado. Também estou vendo algo semelhante ao usar axios com redux-saga onde alguns 422 não estão sendo tratados como uma promessa rejeitada.

Não importa, encontrei meu problema. Os interceptadores não estavam propagando corretamente os erros para a camada do aplicativo, d'oh! 😳

Depois de investigar esse problema, descobri que, na verdade, era um erro de tipo local oculto na pilha de chamadas em algum lugar, levando-me a acreditar que é um problema local e não um problema com o Axios.

ATUALIZAR:

Depois de alguma investigação, consegui atribuir isso a um interceptador ruim de "resposta rejeitada".

Dentro do interceptor eu escrevi:

return error

e resolvi o problema escrevendo:

return Promise.reject(error);
Esta página foi útil?
0 / 5 - 0 avaliações