Android RxJava2 повторяется, когда использование не компилируется - PullRequest
0 голосов
/ 04 сентября 2018

Попытка добавить повтор для вызова RxJava2 retrofit2 в Kotlin, однако, не может определить правильный синтаксис.

Провел некоторое исследование и обнаружил, что мне нужно использовать retryWhen, используя шаблон, например (для повторной попытки 3 раза):

val api: Single<Item> = ...;
api
   .subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread())
   .retryWhen {errors ->
            errors
                .zipWith(Observable.range(1, 3), { index: Int -> {} })
                .flatMap {
                    count: Int -> Observable.timer(5, TimeUnit.SECONDS)
                }
        }
   .subscribe { }

Но при этом я получаю различные ошибки сборки:

None of the following functions can be called with the arguments supplied:

@CheckReturnValue @BackpressureSupport @SchedulerSupport public final fun <U : Any!, R : Any!> zipWith(p0: ((Subscriber<in (???..???)>!) -> Unit)!, p1: ((Throwable, ???) -> ???)!): Flowable<(???..???)>! defined in io.reactivex.Flowable
@CheckReturnValue @BackpressureSupport @SchedulerSupport public final fun <U : Any!, R : Any!> zipWith(p0: (Mutable)Iterable<(???..???)>!, p1: ((Throwable, ???) -> ???)!): Flowable<(???..???)>! defined in io.reactivex.Flowable
@CheckReturnValue @BackpressureSupport @SchedulerSupport public final fun <U : Any!, R : Any!> zipWith(p0: (Mutable)Iterable<(???..???)>!, p1: BiFunction<in Throwable!, in (???..???), out (???..???)>!): Flowable<(???..???)>! defined in io.reactivex.Flowable
@CheckReturnValue @BackpressureSupport @SchedulerSupport public final fun <U : Any!, R : Any!> zipWith(p0: Publisher<out (???..???)>!, p1: BiFunction<in Throwable!, in (???..???), out (???..???)>!): Flowable<(???..???)>! defined in io.reactivex.Flowable

Что я пропускаю или делаю неправильно? Я не могу найти хороший учебник, который я могу пройти, чтобы понять это лучше?

1 Ответ

0 голосов
/ 04 сентября 2018

Вы должны внести изменения в свой оператор zipWith, чтобы использовать BiFunction, например:

.zipWith(Observable.range(1, 3), BiFunction { error: Throwable, index: Int -> index })

Как видно из ошибок сборки, вы должны указать Throwable в качестве первого параметра в BiFunction.

...