我们有一个项目在应用程序的许多部分使用[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 与redux-saga
一起使用时,我也看到了类似的情况,其中一些 422 没有被视为被拒绝的承诺。
没关系,发现我的问题。 拦截器没有正确地将错误传播到应用层,d'oh! 😳
在调查了这个问题后,我发现它实际上是一个隐藏在调用堆栈深处某处的本地类型错误,导致我认为这是一个本地问题而不是 Axios 的问题。
更新:
经过一番调查,我能够将其归结为一个糟糕的“响应被拒绝”拦截器。
在拦截器中,我写道:
return error
我解决了这个问题,而是写:
return Promise.reject(error);
最有用的评论
在调查了这个问题后,我发现它实际上是一个隐藏在调用堆栈深处某处的本地类型错误,导致我认为这是一个本地问题而不是 Axios 的问题。
更新:
经过一番调查,我能够将其归结为一个糟糕的“响应被拒绝”拦截器。
在拦截器中,我写道:
我解决了这个问题,而是写: