Rx combineLatest等待两个observable发出

时间:2018-01-10 06:56:51

标签: javascript rxjs ngrx

假设我有一个拥有ID和实体的商店,我需要在它们发生变化时将它们组合起来。

const state = {
  ids: [],
  entities: {}
}
const store = new BehaviorSubject(state);

Observable.combineLatest(
   store.map(state => state.ids).distinctUntilChanged(),
   store.map(state => state.entities).distinctUntilChanged(),
   (ids, entities) => {
     return ids.map(id => entities[id])
   }
).subscribe(console.log);

store.next({ids: [1], entities: {1: {id: 1}}})

上面代码的问题是选择器函数将被调用两次,因为实体和id都发生了变化。

有没有运营商来解决这个问题?如果没有,我怎样才能创建一个解决这个问题的方法呢?

我想到了一个特殊的测试。等待一段时间并将下一个()联合到一个。

注意:它应该支持添加,更新和删除。

zip操作符将解决,添加和删除,因为在这种情况下我正在更新ID和实体,但更新实体将无法工作。

1 个答案:

答案 0 :(得分:1)

withLatestFrom运营商应该完成这项工作。

1