2017-09-12 3 views
0

Ich bekomme Laufzeitfehler, wenn ich als nächstes (..) auf ein BehaviorSubject setze, das ein firebase.User | ist Null-TypBehaviorSubject weiter nicht definiert

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

Hier ist der Code, der das Problem verursacht.

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!'); 
     } 
    } 

} 

Der Fehler zeigt jederzeit, wenn this.currentUserSubject.next(..) einen Benutzer obj oder null gesetzt wird. Ich vermute, seine weil die currentUserSubject mit null und im nächsten von Null ist falsch initialisiert wird? ...

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

Ich bin nicht in der Lage, es zu initialisieren mit new firebase.User(), weil seine eine Schnittstelle und kein Objekt.

Auch die Deklaration von currentUserSubject als Betreff führt zu demselben Fehler.

private currentUserSubject = new Subject(); 

Was ist der beste Weg, um die Firebase.User Schnittstelle in ein Subject/ReplaySubject zu konvertieren? Ich versuche dies zu tun, so dass, wenn der Benutzer etwas an der Profil-Komponente ändert, es auf dem Firebase-Server dynamisch aktualisiert wird.

Danke.

+0

Ihr Fehler macht keinen Sinn. Ich habe es hier versucht und es funktioniert: https://plnkr.co/edit/etWUx93vtQkfp0mkhbnU?p=preview Sind Sie sicher, dass Sie keine Methode 'set currentUserSubject (v) {' irgendwo? – acdcjunior

Antwort

1

Verwenden Fett Pfeil Funktionen:

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

Wunderbar! das hat funktioniert! – Davvit

Verwandte Themen