Axios: 422応答は拒否されません

作成日 2017年02月22日  ·  3コメント  ·  ソース: axios/axios

アプリケーションの多くの部分で[email protected]を使用するプロジェクトがあります( 0.15.3にアップグレードしても問題は解決しませんでした)。 アプリの他のすべての部分では、 .catch() 422の応答コードを使用できます。 最近、1つのリクエストが422レスポンスを取得するpromiseを解決していることに気付きました。 アプリケーションの他のすべての部分では、422によりaxiospromiseが拒否されます。

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件

確認済み。 redux-sagaでaxiosを使用しているときにも同様のことが見られますが、一部の422は拒否された約束として処理されていません。

気にしないで、私の問題を見つけました。 インターセプターは、エラーをアプリ層に適切に伝達していませんでした。 😳

この問題を調査したところ、実際にはコールスタックのどこかに隠されたローカルタイプのエラーであることがわかり、Axiosの問題ではなくローカルの問題であると私は信じました。

アップデート:

いくつかの調査の後、私はこれを悪い「応答拒否」インターセプターに突き止めることができました。

インターセプター内で私は書いた:

return error

代わりに次のように記述して問題を解決しました。

return Promise.reject(error);
このページは役に立ちましたか?
0 / 5 - 0 評価