RxJava2: onComplete не вызывается с flatMapIterable
Вот короткий фрагмент кода:
val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.flatMapIterable { list: List<Int> -> list }
.subscribeBy(
onNext = { l("on next", it) },
onComplete = { l("on complete") }
)
Зачем onComplete
не звонит сюда? Что я должен сделать для работы этого кода? Потому что в оригинальном коде я не могу использовать .toList()
метод.
1 ответ
Решение
BehaviorSubject
Вы имеете в своей форме бесконечный источник, если onComplete
называется на это. Следовательно flatMapIterable
не будет завершена, и ваш onComplete
обработчик никогда не будет вызван.
Так что либо вы завершите BehaviorSubject
:
val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.flatMapIterable { list: List<Int> -> list }
.subscribeBy(
onNext = { l("on next", it) },
onComplete = { l("on complete") }
)
subject.onComplete() // <-----------------------------------------------------
или вы берете не более одного предмета
val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.take(1) // <----------------------------------------------------------
.flatMapIterable { list: List<Int> -> list }
.subscribeBy(
onNext = { l("on next", it) },
onComplete = { l("on complete") }
)