首页 > 解决方案 > Reactivo 编程练习

问题描述

我有一个可观察的源,当您单击时会发出。我想制作一个像下一个大理石图一样发出的运算符...

也就是说,它在第一次点击时发出。然后,当你有 2 个项目时它会发射,然后当你有 3 个项目时它会发射,等等。

大理石图

我知道可以使用扫描和过滤运算符来完成,但我的问题是,是否可以使用 bufferWhen 运算符来完成?

我试图这样做(像这样),但结果不是我所期望的(第一次点击不会立即发出)。

标签: rxjsreactive-programming

解决方案


它按以下代码工作。尽量避免重用源代码bufferWhen,可能存在竞争条件

const source$ = fromEvent(document, 'click').pipe(
  map(_ => new Date())
);

interval(1000).pipe(
  tap(d => console.log('CLICK:', d)),
  bufferWhen(() => {
    return source$
  })
).subscribe(console.log);

推荐阅读