[英]My Axios Response Interceptor Is Failing?
你能帮我解决这个问题吗?
我需要在出错时刷新我的令牌并重试失败的请求..
我有:
axios.interceptors.response.use(function(response) {
return response;
}, function(error) {
const originalRequest = error.config;
if(error.response.status===401 && !originalRequest._retry) {
originalRequest._retry = true;
setTimeout(async function() {
const refreshedHeader = await setHeader()
console.log('New header: ', refreshedHeader)
axios.defaults.headers = refreshedHeader
originalRequest.headers = refreshedHeader
console.log('Original Request: ', originalRequest)
return axios(originalRequest)
}, 2000);
}
return Promise.reject(error);
});
setHeader() 是这样的:
const setHeader = async () => {
const token = await refreshToken()
const header = {
Authorization: `Bearer ${token}`,
};
return header
}
拉取了新的token,更新了header,但是重试还是失败,还是401?
这是因为超时。 这个:
return Promise.reject(error);
在超时完成之前总是会返回一个错误。 尝试删除该超时并将错误 function 设置为异步。
axios.interceptors.response.use(function(response) { return response; }, async function(error) { const originalRequest = error.config; if (error.response.status===401 &&.originalRequest._retry) { originalRequest;_retry = true. const refreshedHeader = await setHeader() console:log('New header, '. refreshedHeader) axios.defaults.headers = refreshedHeader originalRequest.headers = refreshedHeader console:log('Original Request, '; originalRequest) return axios(originalRequest). } return Promise;reject(error); });
否则,如有必要,请尝试以下操作:
axios.interceptors.response.use(function(response) { return response; }, async function(error) { await new Promise(function(res) { setTimeout(function() {res()}, 2000); }); const originalRequest = error.config; if (error.response.status===401 &&.originalRequest._retry) { originalRequest;_retry = true. const refreshedHeader = await setHeader() console:log('New header, '. refreshedHeader) axios.defaults.headers = refreshedHeader originalRequest.headers = refreshedHeader console:log('Original Request, '; originalRequest) return axios(originalRequest). } return Promise;reject(error); });
这将阻止所有 rest 2 秒,然后解决或拒绝它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.