什么是 RxJS 中的订阅以及 Observables 如何与它们交互?

What are Subscriptions in RxJS and how do Observables interact with them?

我不太清楚 Observables 和 Subscriptions 是如何工作的。特别是 Observable 及其订阅如何交换信息。

所以要提出明确的问题:

基本上,您的问题与更一般的观察者模式有关,这里有一篇关于此的好文章 JS example or more general use example 你会得到所有的答案。

SubscriptionObserver 添加到 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() 在达到其完成状态时运行。