How to return an Observable in angular 4?

16,573

Solution 1

Your authState is already Observable. Just return your authState and subscribe within another function. In the function for any other work you can use RxJS#map function.

getUser() : Observable {
    return this.afAuth.authState.map(...);
}

....

login() {
   getUser().subscribe(user => {
       return user;
   });
}

Solution 2

Don't subscribe inside the getUser function. Just return the obsevable.

getUser() {
    return this.afAuth.authState
}

Solution 3

You can do something like this. Then in your component, the one which is calling this function, you can subscribe to this observable.

getUser(): Observable<any> {
    return Observable.create( (observer: Observer<string>) => {
     this.afAuth.authState.subscribe(user => {
        observer.next(user);
    }, (err) => observer.error("error"));
}); 
}

Ashley

Solution 4

You need to set return type as observable

getUser(): Observable<Type> {
    return this.afAuth.authState;
    });
}
Share:
16,573

Related videos on Youtube

Patrioticcow
Author by

Patrioticcow

spooky action at a distance

Updated on June 04, 2022

Comments

  • Patrioticcow
    Patrioticcow almost 2 years

    I have this method inside a authProvider provider class:

    getUser() {
        return this.afAuth.authState.subscribe(user => {
            return user;
        });
    }
    

    I would like to subscribe to it in a different class, something like:

    this.authProvider.getUser().subscribe(user => console.log(user));
    

    any ideas how to return an Observable inside the getUser() method?

  • P. Moloney
    P. Moloney over 6 years
    You can also use Subjects...
  • Intuitisoft
    Intuitisoft over 4 years
    create is deprecated, use new Observable() instead : getUser(): Observable<any> { return new Observable( (observer: Observer<string>) => { this.afAuth.authState.subscribe(user => { observer.next(user); }, (err) => observer.error("error")); }); }