web-dev-qa-db-ja.com

angular 4でObservableを返す方法は?

このメソッドはauthProviderプロバイダークラス内にあります。

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

次のような別のクラスでサブスクライブしたいと思います。

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

getUser()メソッド内でObservableを返す方法について何かアイデアはありますか?

3
Patrioticcow

あなたのauthStateはすでに監視可能です。 authStateを返し、別の関数内でサブスクライブするだけです。他の作業の関数では、RxJS#map関数を使用できます。

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

....

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

あなたはこのようなことをすることができます。次に、この関数を呼び出しているコンポーネントで、このオブザーバブルをサブスクライブできます。

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

アシュリー

3
ashley

getUser関数内でサブスクライブしないでください。観察可能なものを返すだけです。

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

戻り値の型を監視可能として設定する必要があります

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

関数を直接返し、別のクラスでサブスクライブできます。

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

オブザーバブルは、サブスクライブによって呼び出される関数と考えることができます。

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