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

时间:2018-02-28 07:05:58

标签: reactjs function

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

1 个答案:

答案 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);
     })
  }
}