如果我正在使用Observable<number[]>
,我想将所有排放量收集到一个number[]
。
我总是这样做:
const items$ = Rx.Observable.of([10, 20, 30], [20,30,40])
.reduce((acc, curr) => acc.concat(curr));
let itemsArray = [];
items.subscribe(arr => itemsArray = arr);
console.log(itemsArray); // [10, 20, 30, 20, 30, 40]
我只是想知道是否有任何方法可以&#34; 收集&#34;来自Observable的项目 - 在RxJS中内联而不调用可观察的订阅。
这会建议采用同步方法,鉴于observable的异步特性,我不确定是否可行。
类似的东西:
const itemsArray = Rx.Observable.of([10, 20, 30], [20,30,40])
.reduce((acc, curr) => acc.concat(curr))
.collect( /* return a number[] - not an Observable<number[]> */);
console.log(itemsArray); // [10, 20, 30, 20, 30, 40]
答案 0 :(得分:1)
如果没有订阅,你就无法做到 这是一个流(冷),你需要订阅才能获得价值。
那就是说,我想你想要的是不等到最后一个值发出,并随着时间的推移接收新的连接数组(这是完全可能的)。
要使用的运营商是: scan 实际上,你在减少方面并不远;)!!
const items$ = Rx
.Observable
.of([10, 20, 30], [20,30,40])
.scan((acc, curr) => acc.concat(curr), []);
items$.subscribe(arr => console.log(arr));
答案 1 :(得分:0)