1 回答
TA贡献1785条经验 获得超8个赞
执行两次getAuth都是应为把异步操作获取的auth作为了判断是否进行执行getAuth的条件,还是同样的解决方法把auth修改为Promise对象,需要获取auth值通过await auth即可.
主要修改getAuth方法
async function getAuth () {
if (_auth) {
return Promise.resolve(await _auth)
} else {
_auth = request('getAuth').then(_ => {
return 'token'
})
return _auth
}
}
如果无法使用await那么需要在对auth包裹一层,一样的效果:
async function getAuth () {
if (_auth) {
return new Promise((resolve) => {
_auth.then(resolve)
})
} else {
_auth = request('getAuth').then(_ => {
return 'token'
})
return _auth
}
}
这样每次request获取到的auth,依然是token这个字符串,同样不会出现两次get_Auth请求
执行:
fetch('test1').then(console.log)
fetch('test2').then(console.log)
执行结果:
getAuth request
test1 request
test1 done
test2 request
test2 done
添加回答
举报
