Search code examples
javascriptangularfirebasefirebase-authenticationrxjs

Making an Observable from a callback


I have an auth guard that needs an asynchronous response true/false when the site is visited and the user is already logged in.

I'm using Firebase's onAuthStateChanged (link to docs) and it uses a callback function. How can I turn my isLoggedIn() method into something that can return Observable<boolean>?

Typscript:

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

}

Solution

  • You can do it like this.

    get isLoggedIn(): Observable<boolean> {
    
      // want something like this:
      return Observable.create(
        observer => firebase
            .auth()
            .onAuthStateChanged((user) => {
              observer.next(!!user)
            });
        );
    }