RxJS 等待嵌套的 observable 过滤数组数据

RxJS Waiting for nested observable to filter array data

有两个 Observablesfoobar

foo 将 return array 个对象 [{ id: 1 }, { id: 2 }, ...] (它将 return 整个数组(使用 AngularFire .list这里))

bar 为 return 从 foo 编辑的每个项目存储了一个值。该值存储为这样的对象:{ id: 2, status: false }.

这里需要做的是首先调用foo,在它的map函数中,如果匹配的话,我想从subscribe()方法中取出{ id: 2 } bar 的响应中的值为 false.

换句话说

  1. 观看来自 foo
  2. 的直播
  3. .map 个对象并检查 每个对象 状态 bar
  4. bar returns 一个值为 truefalse
  5. 的可观察值
  6. .filter foo 取出任何带有 status 的对象作为 false

我已经尝试了 combineLatestzip 和其他 RxJS 方法,但不确定我这样做是否正确。有人可以告诉我正确的方法,或者至少指出我应该探索哪些方法吗?

感谢帮助!

谢谢。

//

.... foo
....... itemId1
....... itemId2

.... bar
....... itemId1: true
....... itemId2: false

订阅 foo 后,它 return 的数组必须是 filtered 到 return itemId1,因为它的 bar值为 true(两者都是可观察的,foo 和 bar ofc)

这是完成工作的一段代码:

foo = Rx.Observable.of([
  {id: 1, data: 'foo1'}, 
  {id: 2, data: 'foo2'}, 
  {id: 3, data: 'foo3'}, 
  {id: 4, data: 'foo4'}, 
  {id: 5, data: 'foo5'}, 
  {id: 6, data: 'foo6'}
]);

bar = Rx.Observable.of([
  {id: 1, status: false}, 
  {id: 2, status: true}, 
  {id: 3, status: true}, 
  {id: 4, status: false}, 
  {id: 5, status: true}, 
  {id: 6, status: false}
]).flatMap(obj => obj);

Rx.Observable.combineLatest(foo, bar)
    .filter(([foo, bar]) => bar.status)
    .map(([foo, bar]) => foo.find(obj => obj.id === bar.id))
  .subscribe(data => {
    console.log(data)
  });