RxJava仅重复执行部分流程

问题描述 投票:0回答:1

我有一个Rx流,每当某个事件发生时,它都会依次执行两个动作:

  1. 将SMS发送给一组给定的数字-返回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)
)

但是SMS仅发送一次,我什至尝试了许多其他“组合”(主要是因为我是RxJava的新手,但无济于事。

java android kotlin rx-java2 repeat
1个回答
0
投票

您是否尝试过类似的方法:

© www.soinside.com 2019 - 2024. All rights reserved.