rx.Observable
val results = mutableListOf<Int>()
fun main(args: Array<String>) {
getPagingDataAndShow()
}
private fun getPagingDataAndShow() {
println("getPagingDataAndShow")
var page = 0
getResult(page++)
.flatMap {
results.addAll(it.result)
while (page < it.totalPages) {
getResult(page++).subscribe { results.addAll(it.result) }
}
Observable.just(it)
}
.subscribe({ println(results) },
{ println(it?.message) })
}
private fun getResult(page: Int): Observable<Result> {
println("getResult: $page")
return Observable.just(Result(listOf(3 * page, 3 * page + 1, 3 * page + 2)))
}
data class Result(val result: List<Int>, val totalPages: Int = 5)
Раз уж вопрос задан в котлин чате, то отвечу в стиле котлина. Не нужно использовать rx для загрузки чего-либо. Нужно переходить на корутины. Вот как тоже самое делается на чистом котлине. suspend fun getResult(page: Int): Result suspend fun loadAllPages(): List<Int> { val allPages = mutableListOf<Int😠) val firstPage = getResult(0) allPages.addAll(firstPage.result) for (pageIndex in 1 until firstPage.totalPages) { allPages.addAll(getResult(pageIndex).result) } return allPages }
Обсуждают сегодня