angular – 在两个订阅解析后从服务方法返回Observable

前端之家收集整理的这篇文章主要介绍了angular – 在两个订阅解析后从服务方法返回Observable前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试设置一种简单的方法来将当前用户名与Angular服务中的配置文件用户名进行比较.

显然,在我可以比较它们之前,配置文件用户名用户用户名必须解决,那么如何返回一个布尔值observable以便我可以在组件中订阅这个比较?

这就是我所在的地方:

public profileId = new Subject<string>; // Observable string source updated from a profile.component (when the URL displays the profile's username)
public profileId$= this.profileId.asObservable();
public currentUser = this.principal.asObservable().distinctUntilChanged();

public isProfileOwner(): Observable<boolean> { // A function whose declared type is neither 'void' nor 'any' must return a value.
    this.currentUser.subscribe(user => {
            this.profileId$.subscribe(
                profile => {
                    console.log(profile + ' ' + user.username); // match!
                    if (profile === user.username) {
                        return Observable.of(true);
                    } else {
                        return Observable.of(false);
                    }
                }
            )
        })
}

这似乎是其他SO答案解释的方式,但我得到[ts]一个函数,其声明的类型既不是’void’也不是’any’必须返回一个值.

我想订阅组件内的测试.

this.authService.isProfileOwner().subscribe(
    data => {
        console.log(data); // should be boolean
    }
)
正如@ user184994的其他答案所注意到的,forkJoin在这种情况下不起作用.相反,你可以使用combineLatest,然后非常类似于@ user184994否则实现了服务代码
isProfileOwner(): Observable<boolean> {
  return Observable.combineLatest(this.currentUser,this.profileId$)
    .map(results => {
       let user = results[0];
       let profile = results[1];
       return (user.username === profile)
    });
}

DEMO

猜你在找的Angularjs相关文章