BehaviorSubject与Observable? [英] BehaviorSubject vs Observable?

查看:327
本文介绍了BehaviorSubject与Observable?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究Angular RxJs模式,但我不理解BehaviorSubjectObservable之间的区别.

I'm looking into Angular RxJs patterns and I don't understand the difference between a BehaviorSubject and an Observable.

据我所知,BehaviorSubject是随时间变化的值(可以订阅,订阅者可以接收更新的结果).这似乎与Observable的目的完全相同.

From my understanding, a BehaviorSubject is a value that can change over time (can be subscribed to and subscribers can receive updated results). This seems to be the exact same purpose of an Observable.

您何时会使用ObservableBehaviorSubject?在Observable上使用BehaviorSubject有什么好处,反之亦然?

When would you use an Observable vs a BehaviorSubject? Are there benefits to using a BehaviorSubject over an Observable or vice versa?

推荐答案

BehaviorSubject 是一种主题,主题是一种特殊的可观察对象,因此您可以像其他任何可观察对象一样订阅消息. BehaviorSubject的独特功能是:

BehaviorSubject is a type of subject, a subject is a special type of observable so you can subscribe to messages like any other observable. The unique features of BehaviorSubject are:

  • 它需要一个初始值,因为即使没有收到next()
  • ,它也必须始终在订阅时返回一个值
  • 订阅后,它返回主题的最后一个值.常规可观察对象仅在收到onnext
  • 时触发
  • 在任何时候,您都可以使用getValue()方法以不可观察的代码检索主题的最后一个值.
  • It needs an initial value as it must always return a value on subscription even if it hasn't received a next()
  • Upon subscription, it returns the last value of the subject. A regular observable only triggers when it receives an onnext
  • at any point, you can retrieve the last value of the subject in a non-observable code using the getValue() method.

与可观察对象相比,对象的独特特征是:

Unique features of a subject compared to an observable are:

  • 它不仅是可观察者,而且是观察者,因此您除了订阅它之外,还可以将值发送给主题.

此外,您可以使用BehaviorSubject上的asObservable()方法从行为主体中获得可观察到的信息.

In addition, you can get an observable from behavior subject using the asObservable() method on BehaviorSubject.

Observable 是泛型,而BehaviorSubject从技术上讲是Observable的子类型,因为BehaviorSubject是具有特定质量的Observable.

Observable is a Generic, and BehaviorSubject is technically a sub-type of Observable because BehaviorSubject is an observable with specific qualities.

带有 BehaviorSubject 的示例:

// Behavior Subject

// a is an initial value. if there is a subscription 
// after this, it would get "a" value immediately
let bSubject = new BehaviorSubject("a"); 

bSubject.next("b");

bSubject.subscribe(value => {
  console.log("Subscription got", value); // Subscription got b, 
                                          // ^ This would not happen 
                                          // for a generic observable 
                                          // or generic subject by default
});

bSubject.next("c"); // Subscription got c
bSubject.next("d"); // Subscription got d

带有常规主题的示例2:

Example 2 with regular subject:

// Regular Subject

let subject = new Subject(); 

subject.next("b");

subject.subscribe(value => {
  console.log("Subscription got", value); // Subscription wont get 
                                          // anything at this point
});

subject.next("c"); // Subscription got c
subject.next("d"); // Subscription got d

可以使用subject.asObservable()SubjectBehaviorSubject创建可观察对象.

An observable can be created from both Subject and BehaviorSubject using subject.asObservable().

唯一的区别是您无法使用next()方法将值发送给可观察对象.

The only difference being you can't send values to an observable using next() method.

在Angular服务中,我将对数据服务使用BehaviorSubject,因为Angular服务通常在组件和行为主体确保使用该服务的组件接收到最后更新的数据之前就进行初始化,即使自组件的使用以来没有新的更新也是如此.订阅此数据.

In Angular services, I would use BehaviorSubject for a data service as an angular service often initializes before component and behavior subject ensures that the component consuming the service receives the last updated data even if there are no new updates since the component's subscription to this data.

这篇关于BehaviorSubject与Observable?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆