封裝了ajax請求, 有單獨api模塊, 如果token過期, 從新重繪token,繼續之前的請求,但繼續之前的請求,拿不到介面的回傳值;如何解決。求大神
import {domain} from './config'
let isRefreshing = true
let refreshLoginUrls = []
const wxRequest = (params = {}, url) => {
let token = dd.getStorageSync({key: 'token'}) ? 'Bearer ' + dd.getStorageSync({key: 'token'}).data : ''
let data = params.query || {}
return new Promise(async (resolve, reject) => {
await dd.httpRequest({
url: domain + url,
method: params.method || 'GET',
data: JSON.stringify(data),
headers: {
"Content-Type": "application/json",
Authorization: token
},
dataType: 'json',
success:async sucInfo => {
if (sucInfo.data && sucInfo.data.resultCode == 401) {
refreshLoginUrls.push({params: params, url:url})
if (isRefreshing) {
isRefreshing = false
await refreshToken()
}
return resolve(sucInfo.data)
} else {
return resolve(sucInfo.data)
}
},
fail: failInfo => {
return reject(failInfo)
},
})
})
}
const refreshToken = () => {
return new Promise((resolve, reject) => {
dd.getAuthCode({
success: loginCode => {
if (loginCode.authCode) {
wxPost({query: {code: loginCode.authCode}}, '/api/frontend/login').then(loginInfo => {
if (loginInfo.resultCode == 200) {
dd.setStorage({
key: "token",
data: loginInfo.data.access_token,
success: () => {
dd.setStorageSync({key: 'userInfo', data:loginInfo.data.user_info })
refreshLoginUrls.forEach(item => {
wxPost(item.params, item.url).then(res => {
return resolve(res.data)
})
})
refreshLoginUrls = []
}
})
} else {
return reject(loginInfo.data)
}
})
}
}
})
})
}
const wxGet = async (params = {}, url) => {
params.method = 'GET'
return wxRequest(params, url)
}
const wxPost = async (params = {}, url) => {
params.method = 'POST'
return wxRequest(params, url)
}
module.exports = {
wxRequest, wxGet, wxPost
}
uj5u.com熱心網友回復:
async await轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/247894.html
標籤:JavaScript
下一篇:Vue小白求助
