我对可观察对象和订阅的工作方式不清楚。特别是Observable及其订阅如何交换信息。
因此要提出明确的问题:
答案 0 :(得分:2)
Subscription
是将Observer
添加到Observable
的结果。该对象只能用于该Observable中的unsubscribe
。取消订阅后,观察者将不会再收到任何辐射。
调用Observer
时将创建Observable.subscribe(next, error, complete)
(您可能将其称为“订阅”)。使用Observer
实现自己的Observable时,您将收到Observable.create()
。否则,您将无法获得它。观察者拥有next(value => void)
,error(error => void)
和complete(_ => void)
函数,这些函数被Observable用来传达状态变化。
信息交换仅在一个方向上进行。可观察对象总是向观察者发出,反之亦然。
现在提出您的问题:
Observable是否保留对其订阅的引用?
不,它保留对其Observers
的引用,但这可能就是您的意思。
订阅是否保留对创建它的Observable的引用?
否,只有用于取消订阅该Observable的函数。 Observer
也没有对其已订阅的Observable的引用。
可观察的数据是否在其订阅中“放置”数据,或者订阅是否对其可观察的对象进行“轮询”?
其Observers
的可观察的“ puts”(更好的词为“ emits”)值。来自Observable的从不进行任何轮询,因为这会违反RxJS的基本原理。 BehaviourSubject.getValue()
是一个例外,但是在大多数情况下,您不应该使用它!
信息交换是如何发生的?
这取决于Observable。通常,Observable
保留其所有Observers
的列表,并在发出新值时调用其next()
函数,在发生错误时调用error()
函数,而{{ 1}}达到完整性状态时起作用。
答案 1 :(得分:1)