我正在寻找一个将流转换为具有历史或最后 N 个事件的流的运算符。
所以对于一个流,例如喜欢这个:
clicks$.subscribe((ev) => ...)
我想要类似的东西:
clicks$.pipe(
historyOf(2)
).subscribe(([ev, ev-1, ev-2]) => ...)
这样的算子是否存在,或者有没有一种简单的方法可以将现有的算子组合起来达到预期的效果?
最佳答案
您可以理想地使用 bufferCount
或当少于 N
事件时,也可以根据您希望如何处理序列的开始或终止 scan
或 过滤器
:
const N = 3;
of(1, 2, 3, 4, 5, 6, 7).pipe(
bufferCount(N, 1), // `1` means it'll emit after every emission from source
).subscribe(console.log);
...或者如果您想在链完成时跳过排放:
of(1, 2, 3, 4, 5, 6, 7).pipe(
bufferCount(N, 1),
filter(arr => arr.length === N),
).subscribe(console.log);
...或者如果您也想要开始事件:
of(1, 2, 3, 4, 5, 6, 7).pipe(
scan((acc, item) => [...acc, item].slice(-N), []),
).subscribe(console.log);
关于javascript - RxJS - 哪个运算符可以结合最近 N 个事件的历史?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53849275/