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
},
error => {
// 这边判断你的哪个code是要刷新的
// 也可以写在上面得response里面
// 这边先做个假设 code = 1004是刷新token
return new Promise((resolve, reject) => {
if (error.code === 1004) {
refreshToken()
.then(newToken => {
let config = error.config
config.headers.Authorization = newToken
service(config)
.then(newRes => {
resolve(newRes)
})
.catch(newErr => {
reject(newErr)
})
})
.catch(newErr => {
reject(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.思路就是token过期了,先不给返回,刷新了token之后,在请求一遍,然后再返回
4.这是我写的测试的代码,(可能会有错的地方,但是思路是那样的)我实际用的代码和这个思路是一样的,多个请求同时发起,里面是做了判断的=>promise是否为真,
5.如何各位大佬有其他的方法欢迎指正 ,或者这个思路有漏洞的,也欢迎指正