我有一个Rx流,每当某个事件发生时,它都会依次执行两个动作:
Single<Holster>
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)
)
但是SMS仅发送一次,我什至尝试了许多其他“组合”(主要是因为我是RxJava的新手,但无济于事。
您是否尝试过类似的方法: