angular – 在两个订阅解析后从服务方法返回Observable
发布时间:2020-12-17 08:47:59 所属栏目:安全 来源:网络整理
导读:我正在尝试设置一种简单的方法来将当前用户名与Angular服务中的配置文件用户名进行比较. 显然,在我可以比较它们之前,配置文件用户名和用户的用户名必须解决,那么如何返回一个布尔值observable以便我可以在组件中订阅这个比较? 这就是我所在的地方: public
我正在尝试设置一种简单的方法来将当前用户名与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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |