redux - 如何获取 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]
解决方案
我想你可以试试这个:
actions$ = actions$.pipe(share())
actions$.pipe(
buffer(
actions$.pipe(debounceTime(1000))
)
/* ... */
)
当event1
到达时,它将被添加到内部buffer
并且计时器(从debounceTime
)将启动。如果event2
在计时器结束之前到达,它将被添加到其中buffer
并启动一个新的 timer( 1s
)。当1s
通过时,收集的物品将被发送,在这种情况下event1
和event2
。
当event3
到达时,它将被添加到 中buffer
,如果在 期间没有其他值到达1s
,它将发出event3
。
推荐阅读
- python-3.x - Pandas:更改重复项的索引
- c++ - OpenCL 代码卡在写输出缓冲区
- c - 文件 I/O 未附加
- javascript - 如何检查js中的对象中是否有一些特定的键
- visual-studio - Visual Studio 2017 SSRS 模板和设计器不工作
- python - 为黑盒模型找到返回最大输出的最佳输入组合
- php - Symfony 5:导入 Slack Bundle 的问题
- svn - 如何使用 Tortoise SVN 创建指向某个 URL 的存储库?
- javascript - 在外部浏览器中从 FB 应用程序打开 PWA
- c++ - 带显式模板参数列表和 [temp.arg.explicit]/3 的函数调用推演失败