javascript - RxJS - 哪个运算符可以结合最近 N 个事件的历史?

标签 javascript rxjs

我正在寻找一个将流转换为具有历史或最后 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);

现场演示:https://stackblitz.com/edit/rxjs-xtnscq

关于javascript - RxJS - 哪个运算符可以结合最近 N 个事件的历史?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53849275/

相关文章:

javascript - 从回调中创建 Observable

firebase - 无法订阅combineLatest的结果

javascript - 调整外部div大小时如何避免内部div溢出?

Javascript:转换代码字符串并返回

javascript - ngOninit 没有被触发

angular - RxJS 根据请求时间更改加载指示消息

javascript - RXJS Observable 数组的简单过滤器

javascript - JavaScript 中缺少括号错误

javascript - AJAX HTTP GET 请求必须触发两次才能工作

javascript - 比特币/英镑的汇率如何计算?