rx-java - RxJava:如何刷新定时缓冲区?
问题描述
我正在创建这个 PublishProcessor,它每 10 秒将其元素保存到数据库中:
val publishProcessor = PublishProcessor.create<Entity>()
publishProcessor
.buffer(10, SECONDS)
.observeOn(Schedulers.io())
.subscribe(
{ saveToDatabase(it) },
{ Log.e("TAG", "Error: $it") })
.addTo(compositeDisposable)
当我的活动完成时,我想刷新当前缓冲区中的所有内容,而不是等待 10 秒。我怎么做?
解决方案
Have another subject as the buffer boundary that is merged with an interval:
PublishSubject<Entity> publishProcessor = PublishSubject.create();
Subject<Long> flush = PublishSubject.<Long>create().toSerialized();
publishProcessor
.buffer(flush.mergeWith(Observable.interval(10, TimeUnit.MILLISECONDS)))
.observeOn(Schedulers.io())
.subscribe(...)
flush.onNext(1L);
If you want to also reset the timer upon a manual flush
publishProcessor
.buffer(
flush.mergeWith(Observable.timer(10, TimeUnit.MILLISECONDS))
.take(1)
.repeat()
)
.observeOn(Schedulers.io())
.subscribe(...)
推荐阅读
- powershell - 密码身份验证在 Windows 上的 ssh 中不起作用
- sql - SQL 查询选择所有有商店但没有商店的用户
- python - 打印分成许多列表的字符串
- amazon-web-services - 从 NLB 到达 Nat 实例
- c# - 如何在 C# 中将多维数组解释为一维数组,反之亦然
- r - 有没有办法为包含“facet_wrap()”的ggplot图设置不同的“y”限制?
- machine-learning - CatBoost 中的 CTR 是什么意思
- python - 使用插值的 4 个点之间的曲线
- android - 扩展持久性BottomSheet时如何隐藏AppBar?
- python - 1 脚本 2 Python 终端