RxPY 使用 Subject
Subject 是一个可观察序列,同时也是一个可以多播的观察者,即可以与订阅的多个观察者进行通信。
我们将讨论以下关于 subject 的主题 −
- 创建一个 subject
- 订阅一个 subject
- 将数据传递给 subject
- BehaviorSubject
- ReplaySubject
- AsyncSubject
创建一个 subject
要使用 subject,我们需要导入 Subject,如下所示−
你可以按照以下方式创建一个主语-宾语 –
这个对象是一个观察者,它有三个方法:−
- on_next(value)
- on_error(error) 和
- on_completed()
订阅一个主题
你可以像下面所示创建多个对该主题的订阅−
传递数据给Subject
您可以使用on_next(value)方法将数据传递给已创建的Subject,如下所示 –
这些数据将传递给所有订阅,并添加到主题中。
这里是一个主题的工作示例。
示例
subject_test对象是通过调用Subject()创建的。subject_test对象引用了on_next(value)、on_error(error)和on_completed()方法。上述示例的输出如下所示:
输出
我们可以使用on_completed()方法,如下所示停止subject的执行。
示例
一旦我们调用complete,下一个被调用的方法将不会被启用。
输出
让我们现在来看一下如何调用on_error(error)方法。
示例
输出
BehaviorSubject
在调用时,BehaviorSubject将提供最新的值。您可以按照下面所示的方式创建行为主题(BehaviorSubject) −
这里是一个使用Behaviour Subject的工作示例
示例
输出
ReplaySubject
ReplaySubject与BehaviorSubject类似,它可以缓冲值并向新的订阅者重播相同的值。下面是ReplaySubject的一个工作示例。
示例
缓冲值是2,用于重放主题。因此,最后两个值将被缓冲并用于调用新的订阅者。
输出
AsyncSubject
在AsyncSubject的情况下,被调用的最后一个值将传递给订阅者,并且只有在调用complete()方法之后才完成。