gpt4 book ai didi

angular - 使用 mergeMap 和 forkJoin 时随机订阅流

转载 作者:太空狗 更新时间:2023-10-29 18:29:28 25 4
gpt4 key购买 nike

订阅在 userId 更改时随机运行。有时会,有时我不会。 userId 变量来自下拉选择器(选择库)。

即使 userId 是唯一发生变化的流,也不应该始终运行订阅吗?

有什么明显的我正在破坏或做错的事情吗?

this.singleUserControl.valueChanges
.mergeMap((userId: number) => {
this.router.navigate([ '/r', 'company-admin', 'user-claims', userId.toString() ]);
this.userRoles = [];
this.claims = [];
const userRolesObserv: Observable<Array<RoleWithClaims>> =
this.claimsService.getUserRoles(userId)
.mergeMap((roles: Array<Role>) => {
const roleObservables = [];

for (const role of roles) {
roleObservables.push(this.claimsService.getClaimsForRole(role.id)
.mapTo(claims => ({
role: role,
claims: claims,
} as RoleWithClaims)));
}

return forkJoin(roleObservables);
});

return forkJoin([
Observable.of(userId),
userRolesObserv,
this.claimsService.getAllClaimsForUser(userId),
]);
})
.subscribe((data: [ number, Array<RoleWithClaims>, Array<Claim>]) => {
this.userSelectedId = data[0];
this.userRoles = data[1]
this.claims = data[2];
}, (error) => {
console.log(error);
});

最佳答案

尝试这样做:

return (roleObservables.length) ? forkJoin(roleObservables) : Observable.of([]);

forkJoin 不会发出空数组,因此在此代码中,订阅不会针对没有关联 Angular 色的任何用户 ID 执行。

在我所有的 rx 项目中,我都有一个实用函数:

emptyJoin(obs: Observable<any>[]): Observable<any[]> => (obs.length) ? forkJoin(obs) : Observable.of([]);

关于angular - 使用 mergeMap 和 forkJoin 时随机订阅流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49802619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com