RxJava Подписка на множество наблюдаемых не запускает onNext () для всех подписчиков? - PullRequest
0 голосов
/ 19 апреля 2019

Когда я создаю 5 наблюдаемых и подписываюсь на каждую из них с отдельным подписчиком, я интуитивно думал, что каждый подписчик получит соответствующие данные своих наблюдаемых, отправленные с помощью вызова onNext ():

val compositeSubscription = CompositeDisposable()

fun test() {

        for (i in 0..5) {
            compositeSubscription.add (Observable.create<String>(object : ObservableOnSubscribe<String> {
                override fun subscribe(emitter: ObservableEmitter<String>) {
                    emitter.onNext("somestring")
                    emitter.onComplete()
                }
            }).subscribeOn(Schedulers.computation())
                .observeOn(AndroidSchedulers.mainThread())
                    .subscribe({
                        Logger.i("testIt onNext")
                    }, {
                        Logger.i("testIt onError")
                    }))
        }
}

Тем не менее, я вижу один или два "testIt onNext" в журнале.

Теперь, когда я добавляю задержку в onNext () подписчиков, все 6 подписчиков onNext () получают вызов.

Похоже, что это довольно редкое условие, когда некоторые подписчики не достаточно быстры, чтобы догнать свои данные. То, как это происходит, ускользает от меня, так как подписка () должна вызываться после того, как подписчик запущен и работает.

Буду благодарен за любые советы по этому вопросу.

1 Ответ

2 голосов
/ 22 апреля 2019

Судя по этому коду, каждый подписчик должен напечатать «testIt onNext». Вы уверены, что это не печатается? Может быть, Android Studio рушится одинаковыми линиями? Вы пытались распечатать что-то свое для каждого подписчика?

...