Напротив оператора switchMap в RxJava2 - PullRequest
0 голосов
/ 11 октября 2018

У меня есть конфигурация Observable, на которую я подписываюсь и запускаю свой собственный Observable, но у меня проблема с отменой работы Observable при получении обновления конфигурации.

Я думалчто-то вроде оператора switchMap, но в обратном порядке, поэтому, когда есть новое значение из источника Observable, мы отписываемся от сопоставленного Observable и подписываемся на новое.

Например:

configuration.
    reverseSwitchMap {
        createMyObservable(it.somethingFromConfiguration) // this observable get's recreated for each configuration update
    }.subscribe {
        // here I'm receiving values from myObservable
    }

Есть ли оператор, который мог бы помочь мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Это именно то, для чего предназначен switchMap.

Это должно работать:

fun startUpdates() {
    configuration.toObservable()
        .switchMap { configuration -> MyObservable(configuration) }                  
        .subscribe { //do something }
}
0 голосов
/ 11 октября 2018

Я думаю, что я слишком усложняю это, поэтому на данный момент я создал следующее решение:

private val disposable: Disposable? = null

fun startUpdates() {
    configuration.toObservable()
        .forEach { configuration ->
            disposable?.dispose
            disposable = MyObservable(configuration)
                .subscribe { //do something }
        }
}

Пока этого достаточно, хотя я оставлю вопрос открытым, если кто-то найдет лучшее решение.

...