Intereting Posts
Как обновить kotlin-js-library до 1.1.3, как это было с kotlin-gradle-plugin? Как использовать дженерики в сопутствующем объекте Micro web-framework для Kotlin как уменьшить размер видео во время записи, Android? Реализация Java-аннотации в Котлине Присвоить новое значение переменным с помощью метода в Котлин? Возможно ли распространять список внутри списка в Котлине? Какие пакеты / функции импортируются по умолчанию в Котлин? Как решить: «ошибка: не удается найти класс символов …» после преобразования класса Java в Kotlin? Как выбрать другой модуль для запуска, когда вы нажимаете кнопку «Выполнить» в IntelliJ IDEA? Цепочные обещания с пользовательскими типами ошибок с Kovenant Конфигурируемый завод в Котлине для JavaScript неразрешенная ссылка: Обратный звонок Кинжал и Котлин. Кинжал не генерирует классы компонентов Написание модульных тестов в Котлине, обмен переменных?

Как я могу условно добавить асинхронную операцию в середине потока RxJava?

Вот упрощенная версия того, что я пытаюсь сделать (используя Kotlin и RxJava)

makeServerCall() .doOnNext { doStuff(it) } //TODO: if it == 0, call asyncOperation() and wait for its callback to fire //before running the rest of the stream. Otherwise immediately run the rest //of the stream .flatMap { observable1(it) observable2(it) Observable.merge( getSpotSearchObservable(observable1), getSpotSearchObservable(observable2) } .subscribeBy(onNext = { allDone() view? }) 

Как я могу сжать вызов asyncOperation() и заставить остальную часть потока ждать, пока его обратный вызов будет asyncOperation() , но только при выполнении определенного условия? Кажется, что это, вероятно, тривиальная операция в Rx, но очевидное решение не приходит на ум.

FlatMap это!

 .flatMap { if (it == 0) { return@flatMap asyncOperation() .ignoreElements() .andThen(Observable.just(0)) } return@flatMap Observable.just(it) } .flatMap { observable1(it) observable2(it) Observable.merge( getSpotSearchObservable(observable1), getSpotSearchObservable(observable2) ) }