Axios: 422 响应未被拒绝

创建于 2017-02-22  ·  3评论  ·  资料来源: axios/axios

我们有一个项目在应用程序的许多部分使用[email protected] (升级到 0.15.3 没有解决问题)。 在应用程序的所有其他部分,我们能够.catch() 422 个响应代码。 最近我们注意到 1 个请求正在解决一个得到 422 响应的承诺。 在我们应用程序的所有其他部分中,422 会导致 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));
      });
  };
}

源代码在这里

我能够通过将以下行添加到我的.then()来解决这个问题:

if (resp instanceof Error) { throw resp; }

哪个工作正常,但我仍然对为什么这个特定的 422 被解决(而不是被拒绝)感到困惑。 我们还使用了一些拦截器,但它们不会对我们发出的其他请求造成任何问题。

是否有任何情况会导致 axios 解决 422 而不是拒绝它? 如果您需要任何其他信息,请告诉我。

谢谢您的帮助!

最有用的评论

在调查了这个问题后,我发现它实际上是一个隐藏在调用堆栈深处某处的本地类型错误,导致我认为这是一个本地问题而不是 Axios 的问题。

更新:

经过一番调查,我能够将其归结为一个糟糕的“响应被拒绝”拦截器。

在拦截器中,我写道:

return error

我解决了这个问题,而是写:

return Promise.reject(error);

所有3条评论

确认的。 在将 axios 与redux-saga一起使用时,我也看到了类似的情况,其中一些 422 没有被视为被拒绝的承诺。

没关系,发现我的问题。 拦截器没有正确地将错误传播到应用层,d'oh! 😳

在调查了这个问题后,我发现它实际上是一个隐藏在调用堆栈深处某处的本地类型错误,导致我认为这是一个本地问题而不是 Axios 的问题。

更新:

经过一番调查,我能够将其归结为一个糟糕的“响应被拒绝”拦截器。

在拦截器中,我写道:

return error

我解决了这个问题,而是写:

return Promise.reject(error);
此页面是否有帮助?
0 / 5 - 0 等级