Я пытаюсь отправить запрос в перехватчик запросов Ax ios. Мне нужно дождаться этого запроса до конца sh перед отправкой любого другого запроса. (Вариант использования обновляет маркер доступа)
Проблема в том, что запрос никогда не отправляется и выдает исключение undefined
.
Вот что я делаю:
Регистрация перехватчика:
api.interceptors.request.use(handleInterceptRequest);
Использование этого перехватчика для проверки маркера с истекшим сроком перед каждым запросом:
async function handleInterceptRequest(config) {
if(config.url === '/auth/refresh'){
return false;
}
return new Promise(async (resolve, reject) => {
const token = store.getState().app.token;
//Check if token has expired:
if (token && Date.now() / 1000 >= jwtDecode(token).exp) {
try{
//Token has expired - trigger method below to send a refresh request and save the new token
await refreshToken(token);
} catch(error){
reject(error); // error is caught here but is undefined
}
}
//Only when everything is finished resolve the requst config and let other requests pass
resolve(config);
});
}
async function refreshToken(prevToken) {
//Trying to send the request (The destructiring is not the issue)
const { data : { access_token } } = await api({
url: '/auth/refresh',
method: 'post',
headers: {
Authorization: `Bearer ${prevToken}`
}
});
//I never get here
api.defaults.headers.common.Authorization = `Bearer ${access_token}`;
setItem('token', access_token);
store.dispatch(setToken(access_token));
return access_token;
}
Запрос refre sh никогда не будет получен отправлено и выдается исключение. Может кто-нибудь сказать мне, почему это происходит?
Я также попытался сделать что-то подобное вместо этого в функции refreshToken:
Это работает:
async function refreshToken(prevToken) {
const data = await new Promise(resolve => {
setTimeout(() => {
resolve('foo');
}, 1000);
});
return data;
}
Это не работает:
async function refreshToken(prevToken) {
const { data } = await api({
method: 'post',
url: 'https://jsonplaceholder.typicode.com/posts',
headers: {
"Content-type": "application/json; charset=UTF-8"
},
data: {
title: 'foo',
body: 'bar',
userId: 1
}
});
return data;
}
Так что определенно что-то не так с этой установкой перехватчика, которая не позволяла топору ios даже запустить его.
Спасибо