我需要将一个值从一个函数返回到另一个函数。我有一个函数用于检查access_token是否已过期。如果已过期,它将调用另一个函数来返回刷新令牌。
下面的函数将检查访问令牌是否过期。如果是这样,它将调用另一个函数来返回刷新令牌。
export function check_expires(){
let expires_token = JSON.parse(localStorage.getItem('expires_token'))
let uid = JSON.parse(localStorage.getItem('id'))
if (new Date().getTime()/1000 < expires_token){
const a = getNewAccessToken()
}
}
此函数必须返回存储在firebase中的刷新令牌。
export function getNewAccessToken() {
let uid = JSON.parse(localStorage.getItem('id'))
let refresh_token = ''
firebase.database().ref('users/'+uid).on("value", snap => {
refresh_token = snap.val().refresh_token
let access_token = snap.val().access_token
})
return refresh_token
}
但是console.log(refresh_token)
,给了我一个空字符串。如何将此refresh_token值从getNewAccessToken()
返回到check_expires()
。
答案 0 :(得分:0)
您不是在等待回调完成并立即返回结果。您需要链接异步调用。
您可以使用Promise链接异步调用。
<强> getNewAccessToken:强>
export function getNewAccessToken() {
return new Promise((resolve, reject) => {
let uid = JSON.parse(localStorage.getItem('id'))
let refresh_token = ''
firebase
.database()
.ref('users/' + uid)
.on("value", snap => {
refresh_token = snap
.val()
.refresh_token
let access_token = snap
.val()
.access_token;
resolve(access_token);
})
//hanlded rejection status
})
}
check_expires:
export function check_expires(){
let expires_token = JSON.parse(localStorage.getItem('expires_token'))
let uid = JSON.parse(localStorage.getItem('id'))
if (new Date().getTime()/1000 < expires_token){
getNewAccessToken().then((access_token)=>{
console.log(access_token)
}).catch((reason)=>{
console.log(reason);
})
}
}