繁体   English   中英

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

[英]RxJS Waiting for nested observable to filter array data

有两个Observablesfoobar

foo将返回一个对象array ,例如[{ id: 1 }, { id: 2 }, ...] (它将返回整个数组(此处使用 AngularFire .list ))

bar为从foo返回的每个项目都有一个存储值。 该值存储为一个对象,如下所示: { id: 2, status: false }

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

换句话说

  1. foo观看流
  2. .map对象并从bar检查每个对象的状态
  3. bar返回一个值为truefalse的 observable
  4. . filter foo以取出statusfalse任何对象

我尝试了combineLatestzip和其他RxJS方法,但不确定我是否正确执行此操作。 有人可以告诉我正确的方法,或者至少指出我们应该探索哪些方法?

感谢帮助!

谢谢。

//

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

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

订阅foo ,它返回的数组必须filtered以仅返回itemId1 ,因为它的bar值为true (两者都是 observables,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)
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM