@@ -74,6 +74,7 @@ export type Token = {
7474 createtime : number ;
7575} ;
7676const refreshTokenPromises : Partial < Record < NetDiskType , Promise < string > > > = { } ;
77+ const authTokenPromises : Partial < Record < NetDiskType , Promise < Token > > > = { } ;
7778
7879function refreshAccessToken (
7980 netDiskType : NetDiskType ,
@@ -126,19 +127,30 @@ export async function AuthVerify(netDiskType: NetDiskType, invalid?: boolean) {
126127 }
127128 // token不存在,或者没有accessToken,重新获取
128129 if ( ! token || ! token . accessToken ) {
129- // 强制重新获取token
130- await NetDisk ( netDiskType ) ;
131- const resp = await GetNetDiskToken ( netDiskType ) ;
132- if ( resp . code !== 0 ) {
133- throw new WarpTokenError ( new Error ( resp . msg ) ) ;
130+ if ( ! authTokenPromises [ netDiskType ] ) {
131+ const authPromise = ( async ( ) => {
132+ // 强制重新获取token
133+ await NetDisk ( netDiskType ) ;
134+ const resp = await GetNetDiskToken ( netDiskType ) ;
135+ if ( resp . code !== 0 ) {
136+ throw new WarpTokenError ( new Error ( resp . msg ) ) ;
137+ }
138+ const newToken = {
139+ accessToken : resp . data . token . access_token ,
140+ refreshToken : resp . data . token . refresh_token ,
141+ createtime : Date . now ( ) ,
142+ } ;
143+ await localStorageDAO . saveValue ( key , newToken ) ;
144+ return newToken ;
145+ } ) ( ) . finally ( ( ) => {
146+ if ( authTokenPromises [ netDiskType ] === authPromise ) {
147+ delete authTokenPromises [ netDiskType ] ;
148+ }
149+ } ) ;
150+ authTokenPromises [ netDiskType ] = authPromise ;
134151 }
135- token = {
136- accessToken : resp . data . token . access_token ,
137- refreshToken : resp . data . token . refresh_token ,
138- createtime : Date . now ( ) ,
139- } ;
152+ token = await authTokenPromises [ netDiskType ] ;
140153 invalid = false ;
141- await localStorageDAO . saveValue ( key , token ) ;
142154 }
143155 // token未过期(一小时内)及有效则保留,不用刷新token
144156 const unexpired = Date . now ( ) < token . createtime + 3600000 ;
0 commit comments