Kotlin RxJava CompletableSubject toFlowable/toObservable不';不发射

Kotlin RxJava CompletableSubject toFlowable/toObservable不';不发射,kotlin,rx-java,rx-java2,Kotlin,Rx Java,Rx Java2,因此,我有一个生产者/出版商,它是完全主体 我想要一个只读版本,供订阅者/观察员使用 但是无论是toFLowable()还是toObservable都没有发出任何信号 我错过了什么 fun main(){ val publisher=CompletableSubject.create() val readOnlyStream=publisher.toFlowable() println(“1${publisher.hasscomplete()}”) readOnlyStream.subscrib

因此,我有一个生产者/出版商,它是完全主体

我想要一个只读版本,供订阅者/观察员使用 但是无论是
toFLowable()
还是
toObservable
都没有发出任何信号

我错过了什么

fun main(){
val publisher=CompletableSubject.create()
val readOnlyStream=publisher.toFlowable()
println(“1${publisher.hasscomplete()}”)
readOnlyStream.subscribe{item->
println(“耶,得到了$item”)
}
println(“2${publisher.hasComplete()}”)
publisher.onComplete()
println(“3${publisher.hasscomplete()}”)
线程睡眠(3000L)
}
产出:

1 false
2 false
3 true
1 false
2 false
yay, got it doneee
3 true
我发现了奇怪的解决方法

fun main(){
val publisher=CompletableSubject.create()
val readOnlyStream=publisher.toSingle{
“多尼”
}
println(“1${publisher.hasscomplete()}”)
readOnlyStream.subscribe{item->
println(“耶,得到了$item”)
}
println(“2${publisher.hasComplete()}”)
publisher.onComplete()
println(“3${publisher.hasscomplete()}”)
线程睡眠(3000L)
}
产出:

1 false
2 false
3 true
1 false
2 false
yay, got it doneee
3 true

正如akarnokd在评论中所说的那样,
readOnlyStream.subscribe{item->
正在为一个项添加回调,而一个项从未发出过。 但是,这并不意味着onComplete事件没有传播到Flowable。onComplete事件可以按如下方式订阅:

readOnlyStream.subscribe(
    {}, // onNext, called for each item
    {}, // onError, called once when there is an error
    { println("yay, got onComplete") }, // onComplete, called once when completed
)

completableSubject的subscribe方法没有onNext方法,因为Completables不会发出任何项,只会发出一个Error或onComplete事件。

completableSubject只能这样终止,并且不知道onNext。因此,您必须在其终止时注入一个值。toSingle会这样做。@akarnokd,谢谢。我的一名团队成员就像做
completableSubject.subscribe{}
一样,这意味着消费者/观察者可能会错误地导致终止,而不管发布者是谁。我忍不住觉得这与其他类型的主题相当不一致