【发布时间】:2018-02-01 07:24:20
【问题描述】:
我有两个想要收听的流源。要求是:
- 如果一个发出,也给我第二个的最后一个值。
- 如果其中两个同时发出,请不要调用 subscribe 两次。
第一种情况是 combineLatest,但第二种情况是 zip。我需要一种将 combineLatest 和 zip 混合到一个运算符中的方法。
const { Observable, BehaviorSubject} = Rx;
const movies = {
ids: [],
entities: {}
}
const actors = {
ids: [],
entities: {}
}
const storeOne = new BehaviorSubject(movies);
const storeTwo = new BehaviorSubject(actors);
const movies$ = storeOne.map(state => state.entities).distinctUntilChanged();
const actors$ = storeTwo.map(state => state.entities).distinctUntilChanged();
const both$ = Observable.zip(
movies$,
actors$,
(movies, actors) => {
return {movies, actors};
}
)
both$.subscribe(console.log);
storeOne.next({
...storeOne.getValue(),
entities: {
1: {id: 1}
},
ids: [1]
});
storeTwo.next({
...storeTwo.getValue(),
entities: {
1: {id: 1}
},
ids: [1]
});
上面的代码在一个接一个地发射时工作正常,但我还需要支持其中一个发射的情况。 (结合最新)
我该怎么做?
【问题讨论】:
-
Observable.combineLatest(movies$, actors$, (movies, actors) => ({ movies, actors })).auditTime(0) -
你能解释一下吗?
-
目前真的没有时间写一个像样的答案。如果没有其他人这样做,我可能会在以后这样做。或者您可以查看docs。
-
我喜欢你的回答,你很有帮助,我会等待,谢谢!
标签: javascript rxjs