带有 fork-join 的 Angular 订阅方法不起作用
这是我的许可服务。我想要一个布尔数组。
import { forkJoin, Observable } from "rxjs";
import { map } from 'rxjs/operators';
private hasPermission(lessorId: number, userId: number, permission: string): boolean {
// returns boolean. It works correctly
}
hasPermissionsForX(permissions: string[]): Observable<boolean[]> {
return forkJoin([
this.userService.getUser(), //returns Observable
this.lessorService.getLessor() //returns Observable
]).pipe(
map(([user, lessor]) => permissions.map(permission => this.hasPermission(lessor.lessorId, user.userId, permission)))
)}
但是,我的订阅方法不起作用。该方法尚未进入该函数。我什至无法得到 console.log 响应。这是我的订阅方法。
const permissionsToCheck = ['firstPermission', 'secondPermission', 'thirdPermission'];
this.permissionService.hasPermissionsForX(permissionsToCheck).subscribe(([firstPermission, secondPermission, thirdPermission]) => {
console.log(firstPermission, secondPermission, thirdPermission)
})
我该怎么办?我做错了什么?
提前致谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从你的服务方法的名称来看,我假设你实际上想使用在所有 Observables emit 之后发出的
zip
,而不是forkJoin
> 仅当所有源可观察对象完成后才会发出。另外,请记住,每个可观察对象都需要订阅者才能发出任何内容。因此,请确保您确实订阅了
hasPermissionsForX()
的结果。zip
forkJoin
Judging by the name of your service methods, I'd assume that you actually wanted to use
zip
which emits after all Observables emit, instead offorkJoin
which will only emit once all source observables complete.Also, keep in mind that every observable needs a subscriber in order to emit anything. So, make sure that you actually subscribe to the result of
hasPermissionsForX()
.zip
forkJoin