【发布时间】:2018-04-05 00:03:26
【问题描述】:
我正试图围绕 RxJs 运算符 groupBy 的用例展开思考,我担心在某些情况下它可能会导致内存泄漏。
我熟悉传统意义上的 groupBy(例如同步列表处理)。我准备写一个groupBy函数来参考:
const groupBy = f => list =>
list.reduce((grouped, item) => {
const category = f(item);
if (!(category in grouped)) {
grouped[category] = [];
}
grouped[category].push(item);
return grouped;
}, {});
const oddsAndEvens = x => x % 2 === 0 ? 'EVEN' : 'ODD';
compose(
console.log,
groupBy(oddsAndEvens)
)([1,2,3,4,5,6,7,8])
// returns: { ODD: [ 1, 3, 5, 7 ], EVEN: [ 2, 4, 6, 8 ] }
请注意,这在更广泛的范围内是无状态的。我假设 RxJs 做了与此类似的事情,其中 EVEN 和 ODD 将返回 observables,并且它以类似集合的方式有状态地跟踪组。如果我错了,请纠正我,重点是我认为 RxJs 必须维护所有分组的有状态列表。
我的问题是,如果分组值的数量(在这个例子中只有 EVEN 和 ODD)不是有限的会发生什么?例如,为您提供唯一标识符以在流的整个生命周期内保持一致性的流。如果您要按此标识符进行分组,RxJs 的 groupBy 操作员是否会继续制作越来越多的组,即使旧的标识符将永远不会再被重新访问?
【问题讨论】:
-
我认为这不是特定于
groupBy。在无限列表上累积结果的所有操作都有可能在某个时候耗尽内存。
标签: functional-programming rxjs reactive-programming