web-dev-qa-db-fra.com

Comment retourner un observable en angulaire 4?

J'ai cette méthode dans une classe de fournisseur authProvider:

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

Je voudrais m'inscrire dans une classe différente, quelque chose comme: 

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

des idées comment retourner un Observable dans la méthode getUser()?

3
Patrioticcow

Votre authState est déjà observable. Il vous suffit de renvoyer votre authState et de vous abonner à une autre fonction. Dans la fonction pour tout autre travail, vous pouvez utiliser la fonction RxJS # map.

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

....

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

Ne vous abonnez pas dans la fonction getUser. Il suffit de retourner l'observable.

getUser() {
    return this.afAuth.authState
}
3
Sachila Ranawaka

Vous pouvez faire quelque chose comme ça. Ensuite, dans votre composant, celui qui appelle cette fonction, vous pouvez vous abonner à cet observable.

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

Ashley

2
ashley

Vous devez définir le type de retour comme observable

getUser(): Observable<Type> {
    return this.afAuth.authState;
    });
}
2
Dheeraj Kumar

Vous pouvez retourner la fonction directement et vous y abonner dans une autre classe. 

  getUser() {
        return this.afAuth.authState();
  }

Vous pouvez considérer les observables comme des fonctions appelées par abonnement. 

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