angular - 为什么这个函数不返回任何值?
问题描述
我是 Angular 的新手。我正在尝试创建一个检查用户是否登录的函数,但 onAuthStateChanged 中的函数不返回任何值
async loginStatus() {
firebase.auth().onAuthStateChanged(firebaseUser => {
if ( firebaseUser) {
console.log(firebaseUser.uid)
this.isuser = true
} else {
this.isuser = false
}
})
return this.isuser ;
}
打印 loginStatus 未定义
解决方案
如果您只是检查一次是否有 firebase 用户,您可以(如 Frank van Puffelen 建议的那样)返回 this .currentUser
。无需承诺:
loginStatus(): boolean {
return !!firebase.auth().currentUser;
}
用法:
checkLoginStatus(): void {
this.isuser = this.loginStatus();
}
但是,如果您想侦听用户更改,则需要在附加侦听器的方法中执行此逻辑:
loginStatus(): void {
firebase.auth().onAuthStateChanged((user) => this.isuser = !!user);
}
有了这个,该方法不会返回任何东西。
你也可以考虑使用Observables
,不过接下来你不妨看看@angular/fire
。一个简单的(未经测试的)Observable 看起来像这样:
readonly loginStatus$: Observable<boolean> = new Observable((subscriber) =>
firebase.auth().onAuthStateChanged((user) => subscriber.next(!!user))
).pipe(
distinctUntilChanged(),
startWith(!!firebase.auth().currentUser),
shareReplay(1)
);
作为旁注,通过声明类型,您可以告诉打字稿编译器您期望该方法返回什么。如果不符合,它会给你一个描述性错误。调试东西要容易得多:)
推荐阅读
- javascript - 如何使用带有可选参数命名的 Apply 调用函数?
- python - 如果在 Python 中的类中引发任何异常,请断开与服务器的连接
- python - 从两个 numpy 数组创建字典
- android - 如何在 Android 中集成 DialogFlow V2?
- stanford-nlp - 斯坦福 CoreNLP:引用注释器
- reactjs - 如何通过参数覆盖 Material UI 类
- spring - Spring Boot中的异常传播-微服务
- javascript - 卡片翻转 CSS 的问题
- azure - Azure Powershell 诊断设置
- django - Django 继承模型:“无法将关键字 'keyword' 解析为字段。” (Django 2.1.1)