Angular12中switchMap返回EMPTY不生效,登出报错Cannot read property 'uid' of null
报错根因
登出操作执行后,AngularFireAuth的authState会发射null值表示当前无登录用户,你原代码未对user为null的情况做拦截,直接访问user.uid就会抛出类型错误。
修改后仍异常的原因
你遇到的编译错误、功能异常通常由两个问题导致:
- 遗漏
valueChanges()调用:你原有逻辑中this.userService.get(user.uid)后需要调用.valueChanges()才会返回对应数据流,教程给出的示例代码省略了这部分,导致switchMap返回值和appUser1声明的Observable类型不匹配,触发编译错误。 EMPTY不符合业务预期:EMPTY是一个不会发射任何数据、直接触发complete回调的Observable,如果你组件侧对appUser1的订阅只处理next回调,登出后不会收到任何状态更新通知,看起来就像登出功能异常。
正确修改方案
直接替换appUser1的getter逻辑即可:
import { of } from 'rxjs'; // 确认已导入of操作符 get appUser1(): Observable<any>{ return this.user1 .pipe( switchMap(user => { if (user) { // 保留原有valueChanges调用 return this.userService.get(user.uid).valueChanges() } // 用of(null)替代EMPTY,明确发射无用户状态 return of(null) }) ) }
如果仍有类型编译报错,可将user1的声明修改为Observable<firebase.User | null>,明确标注user可能为null即可。
内容的提问来源于stack exchange,提问作者Newbster
相关产品推荐
相关产品推荐

