简体   繁体   English

如何以角4返回一个Observable?

[英]How to return an Observable in angular 4?

I have this method inside a authProvider provider class: 我在authProvider提供程序类中有这个方法:

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? 任何想法如何在getUser()方法中返回一个Observable

Your authState is already Observable. 您的authState已经是Observable。 Just return your authState and subscribe within another function. 只需返回你的authState并在另一个函数中订阅。 In the function for any other work you can use RxJS#map function. 在任何其他工作的功能中,您可以使用RxJS #map功能。

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

....

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

Don't subscribe inside the getUser function. 不要在getUser函数中订阅。 Just return the obsevable. 只需返回可见的东西。

getUser() {
    return this.afAuth.authState
}

You can do something like this. 你可以做这样的事情。 Then in your component, the one which is calling this function, you can subscribe to this observable. 然后在您的组件中,调用此函数的组件,您可以订阅此observable。

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

Ashley 阿什利

You need to set return type as observable 您需要将返回类型设置为observable

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

You can return the function directly and subscribe to it in another class. 您可以直接返回该函数并在另一个类中订阅它。

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

You can think of observables as functions that are called by subscribing. 您可以将observable视为订阅调用的函数。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM