Rx java RxJava:为什么订阅共享的可观察更改项
我偶然发现了一些我无法解释的令人困惑的行为。我从一个更大的rx链中提炼了下面的例子,所以不要惊讶我到底为什么要这么做。我只是想了解一下为什么会发生这种情况!:) 但是如果您注释Rx java RxJava:为什么订阅共享的可观察更改项,rx-java,reactive-programming,rx-java2,Rx Java,Reactive Programming,Rx Java2,我偶然发现了一些我无法解释的令人困惑的行为。我从一个更大的rx链中提炼了下面的例子,所以不要惊讶我到底为什么要这么做。我只是想了解一下为什么会发生这种情况!:) 但是如果您注释stateChanges.subscribe(),则会突然丢失Request1,它只打印以下内容: received Request2 你能解释一下吗? 另外,我想知道,即使没有额外的subscribe()在正常情况下,share已经连接到requestStream,并且由于延迟订阅(requestStream),上述设
stateChanges.subscribe()
,则会突然丢失Request1
,它只打印以下内容:
received Request2
你能解释一下吗?
另外,我想知道,即使没有额外的
subscribe()
在正常情况下,share
已经连接到requestStream
,并且由于延迟订阅(requestStream)
,上述设置是否可以发出这两个项目,share
在requestStream
将Request1发送给它之前,获取它的第二个Observer
。因此,requestStream
有两个Observer
s,将Request1发送到第一个会将另一个Observer
添加到第二个消费者,即共享
,因此,那里的最终订户获得Request1
在注释掉的情况下,share
尚未连接到requestStream
,因此requestStream
只能通知delaySubscription
<代码>延迟订阅触发共享
,然后订阅请求流
。但是,PublishSubject
只向Observer
s的当前快照发送项目,同时无法看到其第一个onNext
添加了一个新的Observer
。因此,Request1不会到达println
PublishSubject
不处理中的这个角案例,因为它需要其onNext
记住哪个观察者已经收到当前项目,并在当前观察者的集合发生变化时继续重试。这会增加内存和时间开销。谢谢您的详细回答!我需要一些安静的时间来处理它。
received Request1
received Request2
received Request2