我是新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未定义
return语句的问题是您使用一条语句而不是实际的返回值。使用单个=
运算符可以分配一个值。
分配将返回undefined
。
您可以简单地使用this.isuser
返回此变量的值。
您需要返回您的Promise
:
loginStatus(): Promise<boolean> {
return new Promise(
(resolve) => firebase.auth().onAuthStateChanged((user) => resolve(!!user))
);
}
用法:
async checkLoginStatus(): Promise<void> {
this.isuser = await this.loginStatus();
}
通过声明类型,您可以告诉打字稿编译器您希望该方法返回什么。如果不符合要求,它将给您带来描述性错误。调试起来要容易得多:)
您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)
}
})
})
}
希望这会有所帮助。