如何订阅已在Angular5中订阅的功能

时间:2018-08-02 12:59:03

标签: angular rxjs angular5 observable subscribe

我有一个基本的功能OIDC安全服务,该服务调用API来获取用户详细信息。我需要在其他地方使用此功能。我想重用此函数,并根据条件在3个不同的位置进行一些处理,但是由于无法调用已经订阅的函数,是否有一种方法可以实现而无需一次又一次地编写此代码?

fetchUserDetails(){
            // If it is null call oidc service
            this.oidcSecurityService.getUserData().subscribe(
                (userData: any) => {
                    if (userData) {
                       return userData
                    } 
                });
           return null;
        }

如果我直接调用该函数并进行一些处理,则我得到的错误是userData为空。

1 个答案:

答案 0 :(得分:0)

这在很大程度上取决于您要做什么,但是您可以在订阅前使用share()(或者也许是shareReplay()

fetchUserDetails() {
    // If it is null call oidc service
    const obs$ = this.oidcSecurityService.getUserData().share();

    obs$.subscribe(
        (userData: any) => {
             if (userData) {
                 return userData
             } 
    });

    return obs$;
}