#reactjs #axios
Вопрос:
У меня есть перехватчик axios, который отправляет запрос на обновление маркера доступа, когда исходный запрос получает ошибку 401, но проблема в том, что, хотя он запросил маркер обновления, когда отправляется другой запрос и получает 401, он снова отправляет запрос на маркер обновления!. Он продолжает отправлять запросы на обновление маркера доступа, когда уже ожидает запрос на обновление маркера. Как я могу это предотвратить?
const createResponseInterceptor = () =gt; { const interceptor = axiosClient.interceptors.response.use( (response) =gt; { return response; }, (error: AxiosError) =gt; { const originalRequest = error.config; if (error.response amp;amp; error.response.status !== 401) { return Promise.reject(error); } axiosClient.interceptors.response.eject(interceptor); console.info('token expired', error.response?.config); return axiosClient .patch('/auth', { refreshToken: localStorage.getItem('refresh_token'), }) .then((res) =gt; { if (res.status === 200) { localStorage.setItem( 'access_token', res.data.accessToken ); axiosClient.defaults.headers['Authorization'] = res.data.accessToken; originalRequest.headers['Authorization'] = res.data.accessToken; return axiosClient(originalRequest); } }) .catch((err) =gt; { if (err.response amp;amp; err.response.status === 401) { localStorage.removeItem('access_token'); localStorage.removeItem('refresh_token'); window.location.href = '/login'; return Promise.reject(err); } else { console.info('error failed'); axiosClient.interceptors.response.eject(interceptor); return Promise.reject(err); } }) .finally(createResponseInterceptor); } );
};
Это мой код перехватчика, он работает просто отлично, но у меня есть только одна проблема.