gpt4 book ai didi

java - RxJava 仅延迟部分流程的重复

转载 作者:行者123 更新时间:2023-12-01 18:18:29 25 4
gpt4 key购买 nike

我有一个 Rx 流程,每当某个事件发生时,它会按顺序执行两个操作:

  1. 向一组给定的号码发送短信 - 返回 Single<Holster>
  2. 将事件保存在本地数据库上 - 返回 Completable

这是我的代码

private void saveBluetoothAlarm(@NonNull Alarm alarm, int type) {
disposable.add( dbManager.getHolsterDAO().getCurrentHolster()
.map(holsters -> holsters.get(0))
.observeOn(AndroidSchedulers.mainThread())
.flatMap(holster -> sendSmsToAll(holster, alarm.type))
.observeOn(Schedulers.io())
.flatMapCompletable(holster -> {
switch (alarm.type) {
case StatisticsEventType.EXTRACTION:
if (something)
return Completable.complete();
else
return Completable.fromAction(() -> dbManager.getAlarmDAO().insert(alarm))
.andThen(saveAlarmOnServer(holster.getId(), alarm));
case StatisticsEventType.MOVEMENT:
if (somethingMore)
return Completable.complete();
else
return Completable.fromAction(() -> dbManager.getAlarmDAO().insert(alarm))
.andThen(saveAlarmOnServer(holster.getId(), alarm));
}
return Completable.complete();
})
.subscribe(() -> {}, Timber::e)
);
}

一切正常,现在我需要第一个行动sendSmsToAll(holster, alarm.type)要重复指定的次数,每次延迟指定的秒数,这些设置在我的 Holster 中定义。对象。

我尝试编辑 flatMap()如下所示,制作 sendSmsToAll()返回Holster :

.flatMapObservable(holster -> Observable.just(sendSmsToAll(holster, alarm.type))
.repeat(holster.sms_settings.repetitions_count)
.delaySubscription(holster.sms_settings.interval, TimeUnit.SECONDS)
)

但短信只发送一次,我什至尝试了很多其他“组合”(主要是因为我是 RxJava 的菜鸟),但没有任何效果。

最佳答案

你有没有尝试过类似的事情:

.flatMapObservable(holster -> Observable.zip(Observable.defer(() -> sendSmsToAll(holster, alarm.type)),
Flowable.timer(holster.sms_settings.interval, SECONDS),
(x, y) -> x)
.repeat(holster.sms_settings.repetitions_count))

关于java - RxJava 仅延迟部分流程的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60323016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com