我正在寻找一个运算符,它将流转换为具有历史记录或最后N个事件的流.
所以对于像这样的流:
clicks$.subscribe((ev) => ...)
我希望有类似的东西:
clicks$.pipe(
   historyOf(2)
).subscribe(([ev, ev-1, ev-2]) => ...)
这样的运营商是否存在,或者是否有一种简单的方法来组合现有的运营商以达到预期的效果?
您可以理想地使用bufferCount或取决于您希望如何处理序列的开始或终止,当还有少于N事件scan或者filter:
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
| 归档时间: | 
 | 
| 查看次数: | 56 次 | 
| 最近记录: |