let isRefreshToken = false
const request = (url:string, method:string, data?:any) => {
return new Promise(async (resolve, reject) => {
if (isRefreshToken) return
// 判断token超时,刷新token
if (Store.getters.expiresTime && new Date().getTime() >= Store.getters.expiresTime) {
await refreshData()
return
}
...
}
const refreshData = async () => {
if (!isRefreshToken) {
isRefreshToken = true
if (!Store.getters.referToken) {
cleanData()
isRefreshToken = false
} else {
console.log(123);
try {
let res = await refreshToken(Store.getters.referToken)
Store.dispatch('SaveInfo', res)
isRefreshToken = false
uni.switchTab({ url: '/pages/device/index' })
} catch (error) {
cleanData()
}
console.log(333);
}
}
}
打印结果:
打印走到了else中,输出了123。但是没有走trycatch代码?不知道是什么原因?
通常情况下不会在
new Promise()
里用async
函数。如果想用await
,可以不用new Promise()
直接把外层函数定义为async
函数,比如既然用的 TypeScript,会发现
request
的返回类型是Promise<unknown>
,和return new Promise(...)
的返回类型是一致的。如果确实要用 Promise 对象,应该这样所以两种方式,一种是直接定义 async 函数,另一种是在 new Promise() 里正确调用 resolve 和 reject。
顺便说一下,这不是“同步”,是异步。就算是用 await,也是异步程序的“同步写法”,而不是同步。