【问题标题】:PublishSubject does not emit itemsPublishSubject 不发出项目
【发布时间】:2019-12-18 20:32:42
【问题描述】:

为什么下面的代码没有产生任何结果?这个Subject 出了什么问题?我希望在我订阅的那一刻得到一个结果,即我声明的长度。

val subject = PublishSubject.create<String>()//PublishRelay.accept() does not work as well
subject.onNext("Alpha"
subject.onNext("Beta")
subject.onNext("Gamma")
subject.onComplete()
subject.map{ it.length }
        .subscribe { println(it) }

【问题讨论】:

    标签: android rx-java rx-java2 relay publishsubject


    【解决方案1】:

    发布主题仅在订阅后发出项目。 如果您希望所有订阅都获得所有排放,请尝试更改为 ReplaySubject,如果您希望订阅时的最后一个排放,请尝试更改为 BehaviourSubject。

    您可以在此处阅读有关不同类型主题的更多信息:

    http://reactivex.io/documentation/subject.html

    val subject = ReplaySubject.create<String>()/
    subject.onNext("Alpha"
    subject.onNext("Beta")
    subject.onNext("Gamma")
    subject.onComplete()
    subject.map{ it.length }
        .subscribe { println(it) }
    

    或者,订阅,然后调用 onNext:

    val subject = PublishSubject.create<String>()
    subject.map{ it.length }
        .subscribe { println(it) }
    subject.onNext("Alpha"
    subject.onNext("Beta")
    subject.onNext("Gamma")
    subject.onComplete()
    

    【讨论】:

    • 很好的解释
    • @Drocchio 很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多