RxJava: Как извлечь одно и то же наблюдение из разных функций? - PullRequest
0 голосов
/ 26 сентября 2019

В основном в моем приложении для Android есть некоторые метаданные, которые необходимо сообщать на внутренний сервер в различных сценариях:

data class SearchMetaData(
    val searchId: String?,
    val isRateLimit: Boolean
)

Чтобы сделать код чистым, я приведу минимальный случай следующим образом.Вся логика отчета аналогична, каждая из функций subscribe провайдера метаданных и получает значение, о котором нужно сообщить.

fun logEvent1() {
    fetchMetaData().observeOn(schedulers.mainThread()).subscribe({ metadata ->
        ...//lots of other events data here
        val sessionMetadata = SessionMetadata()
        sessionMetadata.id = metadata.searchId
        sessionMetadata.limiit = metadata.isRateLimit
        event1.session = sessionMetadata
        ...
        report(event1)
    })
}

fun logEvent2() {
    fetchMetaData().observeOn(schedulers.mainThread()).subscribe({ metadata ->
        ...//lots of other events data here
        val sessionMetadata = SessionMetadata()
        sessionMetadata.id = metadata.searchId
        sessionMetadata.limiit = metadata.isRateLimit
        event2.session = sessionMetadata
        ...
        report(event2)
    })
}

fun logEvent3() {
    fetchMetaData().observeOn(schedulers.mainThread()).subscribe({ metadata ->
        ...//lots of other events data here
        val sessionMetadata = SessionMetadata()
        sessionMetadata.id = metadata.searchId
        sessionMetadata.limiit = metadata.isRateLimit
        event3.session = sessionMetadata
        ...
        report(event3)
    })
}

Меня беспокоит каждый раз, когда мы меняем схему метаданных, нам нужнообновить все logEventX, мне было интересно, если бы мы могли извлечь все subscribe в различных функциях и получить метаданные?

...