【问题标题】:How to return an Observable in angular 4?如何在角度 4 中返回 Observable?
【发布时间】:2018-02-20 10:20:49
【问题描述】:

我在 authProvider 提供者类中有这个方法:

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

我想在不同的课程中订阅它,例如:

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

任何想法如何在getUser() 方法中返回Observable

【问题讨论】:

    标签: angular typescript observable subscriber


    【解决方案1】:

    你可以做这样的事情。然后在你的组件中,调用这个函数的那个​​,你可以订阅这个 observable。

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

    阿什利

    【讨论】:

    • 你也可以使用Subjects...
    • create 已弃用,请改用 new Observable() :getUser(): Observable&lt;any&gt; { return new Observable( (observer: Observer&lt;string&gt;) =&gt; { this.afAuth.authState.subscribe(user =&gt; { observer.next(user); }, (err) =&gt; observer.error("error")); }); }
    【解决方案2】:

    你的authState 已经是 Observable 了。只需返回您的 authState 并在另一个函数中订阅。在任何其他工作的函数中您都可以使用 RxJS#map 函数。

    getUser() : Observable {
        return this.afAuth.authState.map(...);
    }
    
    ....
    
    login() {
       getUser().subscribe(user => {
           return user;
       });
    }
    

    【讨论】:

      【解决方案3】:

      您可以直接返回该函数并在另一个类中订阅它。

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

      您可以将可观察对象视为通过订阅调用的函数。

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

      【讨论】:

        【解决方案4】:

        您需要将返回类型设置为可观察

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

        【讨论】:

          【解决方案5】:

          不要在getUser 函数中订阅。只需返回可观察的。

          getUser() {
              return this.afAuth.authState
          }
          

          【讨论】:

          • 有道理。但是,为了这个问题..我将如何返回Observable
          • 我很困惑。 this.afAuth.authState 不是返回一个 observable 吗??
          • 如果你想改变getUser函数的返回类型为observable,然后像getUser(): Observable&lt;String&gt;一样改变它
          • authState 是一个可观察的,是的.. 但是,假设我想在那里消费它,然后返回一些其他的,新的 Observable
          猜你喜欢
          • 1970-01-01
          • 2018-12-27
          • 1970-01-01
          • 2020-04-09
          • 1970-01-01
          • 2017-08-20
          相关资源
          最近更新 更多