【JavaScript】axiosのエラーを共通の処理で拾う
問題
axiosでエラーが発生したとき(2xx以外のレスポンスのとき)、unhandledrejectionは使えますか?
答え
こんなことはできる。
window.addEventListener("unhandledrejection", function(event) {
if (event.reason.response.status == 403) {
console.log('許可されていない操作です');
} else if (event.reason.response.status == 401) {
console.log('ログアウトしています');
}
});
axiosのリクエストでレスポンスが2xxでないとき、unhandledrejectionで拾うことはできる。
ただ状況によらず Promise.reject() などしただけでも unhandledrejection が発生するので、event.reason.response.status なんてない状況を拾うこともありうる。
axiosのエラーを拾いたいのなら、素直に .catch するか、axios.interceptors.response.use で設定するのがよいでしょう。
axios.interceptors.response.use(
function(response) {
return response
},
function(error) {
// 何らかの処理が可能
if (error.response.status == 401) {
//
} else if (error.response.status == 403) {
//
}
return Promise.reject(error)
}
)
例外として投げる例
axios.interceptors.response.use(
response => response,
error => {
throw error
}
))