什么是 RxJS 中的订阅以及 Observables 如何与它们交互?
What are Subscriptions in RxJS and how do Observables interact with them?
我不太清楚 Observables 和 Subscriptions 是如何工作的。特别是 Observable 及其订阅如何交换信息。
所以要提出明确的问题:
- Observable 是否保留对其订阅的引用?
- 订阅是否保留对创建它的 Observable 的引用?
- 一个 Observable "put" 数据在它的 Subscriptions 中还是一个 Subscription "poll" 它的 Observable?
- 信息交换是如何发生的?
基本上,您的问题与更一般的观察者模式有关,这里有一篇关于此的好文章
JS example or more general use example 你会得到所有的答案。
Subscription
是 Observer
添加到 Observable
的结果。它是一个只能用于 unsubscribe
来自 Observable 的对象。取消订阅后,观察者将不会收到任何进一步的排放。
Observer
(您可能将其称为订阅)是在您调用 Observable.subscribe(next, error, complete)
时创建的内容。当您使用 Observable.create()
实现自己的 Observable 时,您将收到 Observer
。否则,您将无法掌握它。 Observer 拥有 Observable 用来传达状态变化的 next(value => void)
、error(error => void)
和 complete(_ => void)
函数。
交换信息只发生在一个方向。 Observable 总是向 Observer 发出信号,而不是反过来。
现在回答您的问题:
Does an Observable keep references to its Subscriptions?
不,它保留对其 Observers
的引用,但这可能就是您的意思。
Does a Subscription keep a reference to the Observable that created it?
不,只有一个用于取消订阅该 Observable 的函数。 Observer
也没有对其订阅的 Observable 的引用。
Does an Observable "put" data in its Subscriptions or does a Subscription "poll" its Observable?
Observable "puts"(更好的词应该是 "emits")值到它的 Observers
。 从不 从 Observable 进行任何轮询,因为这会违反 RxJS 的基本原则。一个例外是 BehaviourSubject.getValue()
,但在大多数情况下您不应该使用它!
How does the information exchange happen?
这取决于 Observable。通常,Observable
保存其所有 Observers
的列表,并在发出新值时调用它们的 next()
函数,发生错误时调用 error()
函数, complete()
在达到其完成状态时运行。
我不太清楚 Observables 和 Subscriptions 是如何工作的。特别是 Observable 及其订阅如何交换信息。
所以要提出明确的问题:
- Observable 是否保留对其订阅的引用?
- 订阅是否保留对创建它的 Observable 的引用?
- 一个 Observable "put" 数据在它的 Subscriptions 中还是一个 Subscription "poll" 它的 Observable?
- 信息交换是如何发生的?
基本上,您的问题与更一般的观察者模式有关,这里有一篇关于此的好文章 JS example or more general use example 你会得到所有的答案。
Subscription
是 Observer
添加到 Observable
的结果。它是一个只能用于 unsubscribe
来自 Observable 的对象。取消订阅后,观察者将不会收到任何进一步的排放。
Observer
(您可能将其称为订阅)是在您调用 Observable.subscribe(next, error, complete)
时创建的内容。当您使用 Observable.create()
实现自己的 Observable 时,您将收到 Observer
。否则,您将无法掌握它。 Observer 拥有 Observable 用来传达状态变化的 next(value => void)
、error(error => void)
和 complete(_ => void)
函数。
交换信息只发生在一个方向。 Observable 总是向 Observer 发出信号,而不是反过来。
现在回答您的问题:
Does an Observable keep references to its Subscriptions?
不,它保留对其 Observers
的引用,但这可能就是您的意思。
Does a Subscription keep a reference to the Observable that created it?
不,只有一个用于取消订阅该 Observable 的函数。 Observer
也没有对其订阅的 Observable 的引用。
Does an Observable "put" data in its Subscriptions or does a Subscription "poll" its Observable?
Observable "puts"(更好的词应该是 "emits")值到它的 Observers
。 从不 从 Observable 进行任何轮询,因为这会违反 RxJS 的基本原则。一个例外是 BehaviourSubject.getValue()
,但在大多数情况下您不应该使用它!
How does the information exchange happen?
这取决于 Observable。通常,Observable
保存其所有 Observers
的列表,并在发出新值时调用它们的 next()
函数,发生错误时调用 error()
函数, complete()
在达到其完成状态时运行。