RxJS 等待嵌套的 observable 过滤数组数据
RxJS Waiting for nested observable to filter array data
有两个 Observables
:foo
和 bar
。
foo
将 return array
个对象 [{ id: 1 }, { id: 2 }, ...]
(它将 return 整个数组(使用 AngularFire .list
这里))
bar
为 return 从 foo
编辑的每个项目存储了一个值。该值存储为这样的对象:{ id: 2, status: false }
.
这里需要做的是首先调用foo
,在它的map函数中,如果匹配的话,我想从subscribe()
方法中取出{ id: 2 }
bar
的响应中的值为 false
.
换句话说
- 观看来自
foo
的直播
.map
个对象并检查 每个对象 状态 bar
bar
returns 一个值为 true
或 false
的可观察值
- .
filter
foo
取出任何带有 status
的对象作为 false
我已经尝试了 combineLatest
、zip
和其他 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)
});
有两个 Observables
:foo
和 bar
。
foo
将 return array
个对象 [{ id: 1 }, { id: 2 }, ...]
(它将 return 整个数组(使用 AngularFire .list
这里))
bar
为 return 从 foo
编辑的每个项目存储了一个值。该值存储为这样的对象:{ id: 2, status: false }
.
这里需要做的是首先调用foo
,在它的map函数中,如果匹配的话,我想从subscribe()
方法中取出{ id: 2 }
bar
的响应中的值为 false
.
换句话说
- 观看来自
foo
的直播
.map
个对象并检查 每个对象 状态bar
bar
returns 一个值为true
或false
的可观察值
- .
filter
foo
取出任何带有status
的对象作为false
我已经尝试了 combineLatest
、zip
和其他 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)
});