Tengo un protector de autenticación que necesita una respuesta asíncrona verdadero/falso cuando se visita el sitio y el usuario ya inició sesión.
Estoy usando onAuthStateChanged de Firebase ( enlace a documentos ) y usa una función de devolución de llamada. ¿Cómo puedo convertir mi método isLoggedIn() en algo que pueda devolver Observable<boolean> ?
Texto mecanografiado:
get isLoggedIn(): Observable<boolean> { // want something like this: return Observable.fromCallback(firebase.auth().onAuthStateChanged).map(user => !!user); // this returns () => boolean, but I need a promise or observable return firebase .auth() .onAuthStateChanged((user) => { return !!user; }); }Puedes hacerlo así.
get isLoggedIn(): Observable<boolean> { // want something like this: return Observable.create( observer => firebase .auth() .onAuthStateChanged((user) => { observer.next(!!user) }); ); }hay una forma más de hacer esto usando bindCallback de rxjs/observable/bindCallback
const observable=bindCallback(functionWhichExpectsCallBack)p.ej
function foo(value, callback) { callback(value); } //converts callback to observable const observable = bindCallback(foo); observable(1) .subscribe(console.log);Nota: bindCallback y Observable.create quedaron en desuso,
podrías usar new Observable en su lugar:
... return new Observable((subscriber) => { firebase .auth() .onAuthStateChanged((user) => { subscriber.next(user); }) }