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;
});
}
Related videos on Youtube
Comments
-
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 thegetUser()
method? -
P. Moloney over 6 yearsYou can also use
Subjects
... -
Intuitisoft over 4 yearscreate 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")); }); }