1.这里推荐去看这个老师的视频,我的方案都是根据他的视频来的视频地址
2.这边使用的工具是axios
import axios from 'axios'
const service = axios.create({baseURL: '',headers: {Authorization: 'token 你自己的token',},timeout: 1000 * 60,
})// 拦截响应
service.interceptors.response.use(response => {return response.data},async error => {// 这边判断你的哪个code是要刷新的// 也可以写在上面得response里面// 这边先做个假设 code = 1004是刷新tokenif (error.code === 1004) {await refreshToken().then(async newToken => {let config = error.configconfig.headers.Authorization = newTokenawait service(config).then(newRes => {return newRes}).catch(newErr => {console.log(newErr)})}).catch(newErr => {return newErr})}}
)let promise = null
function refreshToken() {if (promise) {return promise}promise = new Promise((resolve, reject) => {// 这边是你的刷新token得方法// 我假设一个定时器setTimeout(() => {let token = 'newToken'resolve(token)// 这边你的刷新token的方法报错的话就按你的想法处理// reject('刷新token报错了')}, 1000)})promise.finally(() => {promise = null})return promise
}export default service
3.这是我写的测试的代码,(可能会有错的地方,但是思路是那样的)我实际用的代码和这个思路是一样的,多个请求同时发起,里面是做了判断的=>promise是否为真,
4.如何各位大佬有其他的方法欢迎指正 ,或者这个思路有漏洞的,也欢迎指正