如何在reactjs中将值从一个函数返回到另一个函数? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我需要从一个函数返回一个值到另一个函数。我有一个函数用于检查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()

reactjs function
1个回答
0
投票

您没有等待回调完成并立即返回结果。您需要链接Async调用。

您可以使用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);
     })
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.