首页 > 解决方案 > rxjs 是否提供了解决去抖动缓冲区实现的更好方法

问题描述

对于 Angular 应用程序,我遇到这样一种情况,即容器组件正在解析仪表板中各种子组件小部件所做的查询。为了提高性能,我想缓冲这些查询,以便可以将它们组合成对服务器的单个请求。因为每个小部件都有自己的加载过程,所以它发送查询的时间可能会有所不同。

我想要实现的功能是,对于由其中一个小部件发出的任何查询,我想等待 200 毫秒以等待发出任何其他小部件查询,同时确保该序列中的所有查询都被缓冲。

我目前有以下方法来解决这个问题:

const queryRecord$ = new Subject<void>();

queries$
  .pipe(
    tap(() => queryRecord$.next()),
    buffer(queryRecord$.pipe(debounceTime(200))),
    mergeMap(queries => fetcher.fetch(flatten(queries))),
  )
  .subscribe(metrics => {
    // do something
  });

我不禁觉得必须引入一个额外的主题是不对的,但我也想不出另一种方法来做到这一点。

任何人都可以帮助我提出更好的方法来获得相同结果的建议吗?

注意:我已经尝试过bufferTime,但这并不是我想要的,因为它会继续运行 200 毫秒的间隔。

标签: angularrxjsbufferdebounce

解决方案


推荐阅读