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.如何各位大佬有其他的方法歡迎指正?,或者這個思路有漏洞的,也歡迎指正