Из документа Rx для подписки :
Вы не можете использовать subscribeOn()
несколько раз в chain
. Технически, вы можете сделать это, но это не будет иметь никакого дополнительного эффекта. В вашем коде, если вы объединяете в цепочку два разных Schedulers
с использованием subscribeOn()
, то только тот, который закрыт для источника observable
, будет действовать и ничего больше.
Но вы можете добиться того же, используя observeOn()
. Вы можете переключаться между несколькими Schedulers
, используя observeOn()
и, наконец, observe
результат на MainThread
Пример:
Observable.interval(1, TimeUnit.SECONDS)
.observeOn(Schedulers.computation())
.flatMap { constructData() }
.observeOn(Schedulers.io())
.flatMap { data -> api.syncData(data).map { data } }
.observeOn(Schedulers.computation())
.flatMap { data -> deleteSyncedData(data) }
.observeOn(AndroidSchedulers.mainThread())
.subscribe { data ->
}
Но, на мой взгляд, это тоже хорошо.
Observable.interval(1, TimeUnit.SECONDS)
.flatMap { constructData() }
.subscribe { data ->
api.syncData(data)
.repeat()
.subscribe { response ->
deleteSyncedData(data)
}
}