首页 > 解决方案 > 如何获取 RxJS 中在一秒钟内发生的最近事件?

问题描述

我有一个 Observable (redux Epic)。我按时间尝试团体活动。我使用 bufferTime 但这个操作员不等待第一个动作:(

        action$.pipe(
            ofType("SOME_REDUX_ACTION"), // custom filter operator 
            bufferTime(1000),
            tap((events) => console.log("WHY?", events))
            filter(events => !!events.length),
            [...]

电流输出:

WHY? []
WHY? []
WHY? []
WHY? []
WHY? []
WHY? []
WHY? []
WHY? [event1,event2]
WHY? []
WHY? []
WHY? []
WHY? [event3]

没有过滤器的预期输出。

WHY? [event1,event2]
WHY? [event3]

标签: reduxrxjsrxjs6

解决方案


我想你可以试试这个:

actions$ = actions$.pipe(share())

actions$.pipe(
  buffer(
    actions$.pipe(debounceTime(1000))
  )
  /* ... */
)

event1到达时,它将被添加到内部buffer并且计时器(从debounceTime)将启动。如果event2在计时器结束之前到达,它将被添加到其中buffer并启动一个新的 timer( 1s)。当1s通过时,收集的物品将被发送,在这种情况下event1event2

event3到达时,它将被添加到 中buffer,如果在 期间没有其他值到达1s,它将发出event3


推荐阅读