You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 08:33:02