Replay(1) не работает внутри публикации

    val subject = PublishSubject.create<UiModel>()

    val pipeline = subject
            .compose({

                val models = it.ofType(UiModel.Model::class.java)
                        .replay(1)
                        .autoConnect()

                val navigation = it.ofType(UiModel.Navigation::class.java)

                Observable.merge(models, navigation)

            })

теперь давайте подпишемся...

    val disposable = pipeline.subscribe {
        println("First subscriber: ${it.javaClass.simpleName}")
    }

    subject.onNext(UiModel.Model())
    subject.onNext(UiModel.Model())
    subject.onNext(UiModel.Navigation())

    disposable.dispose()


    val disposable1 = pipeline.subscribe { println("Second subscriber: ${it.javaClass.simpleName}") }

    subject.onNext(UiModel.Navigation())

    disposable1.dispose()

    val disposable2 = pipeline.subscribe { println("Third subscriber: ${it.javaClass.simpleName}") }
    disposable2.dispose()

Выход:

Первый подписчик: модель

Первый подписчик: модель

Первый подписчик: навигация

Второй подписчик: модель

Второй подписчик: навигация

Третий подписчик: Модель

Но если преобразователь внутри compose заменен на тот, который многоадресно передает выбросы восходящего потока, наблюдаемые с помощью команды publish:

    val pipeline2 = subject
            .compose({

                it.publish {

                    val models = it.ofType(UiModel.Model::class.java)
                            .replay(1)
                            .autoConnect()

                    val navigation = it.ofType(UiModel.Navigation::class.java)

                    Observable.merge(models, navigation)
                }

            })

А теперь, если мы подпишемся точно так же...... как и выше...

Выход:

Первый подписчик: модель

Первый подписчик: модель

Первый подписчик: навигация

Второй подписчик: навигация

Первое поведение правильное, и я хотел бы воспроизвести последний объект Model только при отмене подписки и повторной подписке. По какой-то причине это не работает, когда используется публикация, ничего не воспроизводится. Я не понимаю почему. Пожалуйста помоги:)

Заранее благодарю за помощь.

0 ответов

Другие вопросы по тегам