为什么这个函数不返回任何值?

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

我是新Angular的新手。我正在尝试创建一个用于检查用户是否登录的函数,但是onAuthStateChanged中的函数不返回任何值

 async loginStatus() { 
    await firebase.auth().onAuthStateChanged(firebaseUser => {
      if ( firebaseUser) {
       console.log(firebaseUser.uid)
      return  this.isuser = true
    } else {
      return this.isuser = false
    }
  })
}

打印loginStatus未定义

angular typescript firebase
3个回答
0
投票

return语句的问题是您使用一条语句而不是实际的返回值。使用单个=运算符可以分配一个值。

分配将返回undefined

您可以简单地使用this.isuser返回此变量的值。


0
投票

您需要返回您的Promise

loginStatus(): Promise<boolean> {
  return new Promise(
    (resolve) => firebase.auth().onAuthStateChanged((user) => resolve(!!user))
  );
}

用法:

async checkLoginStatus(): Promise<void> {
  this.isuser = await this.loginStatus();
}

通过声明类型,您可以告诉打字稿编译器您希望该方法返回什么。如果不符合要求,它将给您带来描述性错误。调试起来要容易得多:)


0
投票

loginStatus函数不会返回任何内容。 return语句位于onAuthStateChanged回调内部。并且您将返回始终为真的赋值表达式。

并且基于此处的firebase文档

https://firebase.google.com/docs/reference/js/firebase.auth

firebase.auth不是异步函数。您不需要等待。

为了实现有意义的回调,如

const isLoginSuccessed: boolean = await loginStatus()

您需要在loginStatus函数中返回一个Promise,如下所示

async loginStatus() { 
  return new Promise((resolve,reject) => {
     const auth = firebase.auth()
     auth.onAuthStateChanged(firebaseUser => {
       if(firebaseUser) {
         resolve(true)
       } else {
         resolve(false)
       }
     })
  })
}

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.