[英]RxJS Waiting for nested observable to filter array data
有两个Observables
: foo
和bar
。
foo
将返回一个对象array
,例如[{ id: 1 }, { id: 2 }, ...]
(它将返回整个数组(此处使用 AngularFire .list
))
bar
为从foo
返回的每个项目都有一个存储值。 该值存储为一个对象,如下所示: { id: 2, status: false }
。
这里需要做的是首先调用foo
,在它的 map 函数中,如果bar
响应中的匹配值是false
,我想从subscribe()
方法中取出{ id: 2 }
。
换句话说
foo
观看流.map
对象并从bar
检查每个对象的状态bar
返回一个值为true
或false
的 observablefilter
foo
以取出status
为false
任何对象我尝试了combineLatest
、 zip
和其他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.