firebase - How to make an observer to return as observable? -
i'm new rxjs , on how solve this.
i want pass observer
onauthstatechanged()
, takes observer object. observer work , emit boolean value such boolean value can returned observable
. how go implement bridge of observable observer?
export class authguard implements canactivate { constructor(private firebase: firebaseservice, private router: router) { } canactivate(): observable<boolean> { this.firebase.auth.onauthstatechanged(/* observer */) return /* observable<boolean> */ } }
to benefit others, here's ended writing , seems work well.
import 'rxjs/add/operator/do'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/take'; import { observable } 'rxjs/observable'; import { replaysubject } 'rxjs/replaysubject'; import { injectable } '@angular/core'; import { canactivate, router } '@angular/router'; import { firebaseservice } '../shared/firebase.service'; @injectable() export class authguard implements canactivate { loggedinsubject: replaysubject<any>; constructor(private firebase: firebaseservice, private router: router) { this.loggedinsubject = new replaysubject(1); this.firebase.auth.onauthstatechanged(this.loggedinsubject); } canactivate(): observable<boolean> { return this.loggedinsubject.map(user => { if (!user) { this.router.navigate(['/login']); } console.log('authenticated?', !!user); return !!user; }).take(1); } }
Comments
Post a Comment