Seb*_*zyk 2 rxjs rxjs5 angular
我有两个hot/warm observable,一个提供用户角色定义列表和第二个用户列表(这些ReplaySubject(1)的工作方式类似于BehaviorSubject而没有起始值).
要显示用户,我需要确保我有角色定义列表.此外,如果角色列表更改或用户更改列表,我必须重新呈现列表.
我想用rxjs的功能并结合这两个observable来获得我描述的语义.我尝试了许多运算符,如switchMap,mergeMap,faltMap,forkJoin和zip但是我无法使其工作.
我能使它工作的唯一方法是使用两个这样的订阅:
this.userRoleStore.observable.subscribe((roles) => {
this.roles = roles;
if (this.users == null) {
this.userStore.observable.subscribe(users => {
this.users = users;
})
}
});
Run Code Online (Sandbox Code Playgroud)
这样我确保在尝试渲染用户之前就拥有了角色,并且只要用户和角色发生变化,它就会更新.
最有希望的是拉链操作器,但是当只有一个可观察到的变化时它不会触发.只有当第一个observable具有新值时才会触发SwitchMap运算符(因此我只获得有关用户或用户角色更改的更新).
combineLatest当任何源Observable发出至少一个值(它同时具有静态变量和运算符变量)之后,看起来你正在寻找发出的东西.
所以在你的情况下,它看起来像这样:
Observable.combineLatest(
this.userRoleStore.observable,
this.userStore.observable
)
.subscribe(([role, user]) => ...);
Run Code Online (Sandbox Code Playgroud)
也许还有看看withLatestFrom.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |