本人技术有限 参考大佬们的代码使用了luch-request http请求插件,非常感谢luch-request http请求插件的开发者分享的这个好用的插件,谢谢。
现在有一个问题请教一下,有一段代码有疑问,想请教各位大佬一下:
代码如下:
let isRefreshing = false;
let requests = [];
http.interceptors.request.use(async (config) => {
/* 请求之前拦截器。可以使用async await 做异步操作 */
config.header = {
...config.header,
}
//isRefreshing同一个页面只执行一次
if (!isRefreshing) {
isRefreshing = true;
await handleRefreshToken();
requests.forEach(cb => cb());
requests = [];
isRefreshing = false;
} else {
return new Promise(resolve => {
// 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
requests.push(() => {
resolve(http.request(response.config));
});
});
}
config.header['accessToken'] = uni.getStorageSync("accessToken"); // 拦截器header加参 uni.getStorageSync('accessToken')
return config
}, (config) => {
return Promise.reject(config)
})
await handleRefreshToken() 代码如下:
// 刷新Token
async function handleRefreshToken() {
await http.post(”服务器accessToken地址“, {}).then(async r => {
isRefreshing = false;
try {uni.setStorageSync("accessToken", r.data.token);return true;} catch (e) {return false;}
}).catch(err => {
isRefreshing = false
});
}
我的疑问是 当我把 http.interceptors.request.use 里的
return new Promise(resolve => {
// 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
requests.push(() => {
resolve(http.request(response.config));
});
});
删除了,才可以正常获取accessToken,如果不删除,就卡在 handleRefreshToken()函数里出不来,
想问一下,我删除了
// 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
requests.push(() => {
resolve(http.request(response.config));
});
});
会有什么影响,谢谢。
君不见 (作者)
很感谢你的回复,不过我看不明白你的意思 ,能不能详细说一下,谢谢。
2021-10-21 23:04