【问题标题】:BehaviorSubject next not definedBehaviorSubject 下一个未定义
【发布时间】:2018-02-20 07:23:00
【问题描述】:

当我在作为 firebase.User 的 BehaviorSubject 上设置 next(..) 时出现运行时错误。空类型。

subscribe.js:165 TypeError: Cannot read property 'next' of undefined

这是导致问题的代码。

export class AppAuthService {

   private currentUserSubject = new BehaviorSubject<firebase.User |null>(null);
   public currentUser = this.currentUserSubject.asObservable().distinctUntilChanged();

   private isAuthenticatedSubject = new ReplaySubject<boolean>(1);
   public isAuthenticated = this.isAuthenticatedSubject.asObservable();

   constructor(public afAuth: AngularFireAuth) {
      afAuth.auth.onAuthStateChanged(this.onAuthStateChanged);
    }

    onAuthStateChanged(user: firebase.User): void {
      if (user) {
        this.currentUserSubject.next(user);    <------err
        this.isAuthenticatedSubject.next(true);
        console.log('loggedIN!');
      } else {
        this.currentUserSubject.next(null);   <-------err
        this.isAuthenticatedSubject.next(false);
        console.log('GONE!');
      }
   }

}

this.currentUserSubject.next(..) 设置为用户obj 或null 时,该错误会随时出现。我怀疑是因为 currentUserSubject 是用 null 初始化的,而下一个 null 是错误的?...

private currentUserSubject = new BehaviorSubject<firebase.User |null>(null);

我无法使用new firebase.User() 对其进行初始化,因为它是一个接口而不是一个对象。

同时将 currentUserSubject 声明为主题会导致相同的错误。

private currentUserSubject = new Subject(); 

将 firebase.User 界面转换为 Subject/ReplaySubject 的最佳方法是什么?我正在尝试这样做,以便当用户更改配置文件组件上的某些内容时,它将在 firebase 服务器上动态更新。

谢谢。

【问题讨论】:

标签: angular typescript firebase firebase-authentication rxjs


【解决方案1】:

使用粗箭头函数:

constructor(public afAuth: AngularFireAuth) {
  afAuth.auth.onAuthStateChanged(user => this.onAuthStateChanged(user));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2022-08-01
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多