例如,一个牛奶机构,供应牛奶,消费者去订阅牛奶,牛奶来了,消费者就可以去喝或者做其他处理
代码实现:
niunaiSubject = new Subject();//创建牛奶机构
niunailoginObservable = this.niunaiSubject .asObservable();//设置牛奶机构为被观察者
sub:subscription=
niunailoginObservable
.subscribe((data)=>{
//喝牛奶
});把观察者(消费者)绑定到被观察者(牛奶机构)上,
niunaiSubject .next(data);//牛奶机构送牛奶,触发观察者(消费者)喝牛奶动作
niunailoginObservable
.subscribe(sub
);1 Observable
被观察者,相当于送奶机构。
实现上是一个函数对象,谁订阅了,就执行此函数的函数体。
2 Observer
观察者,相当于某一个订牛奶的个体。
实现上是一个对象,里面注册了三个回调函数,分别是next、error、complete。
Observable的函数体会执行Observer的回调函数。
3 subscribe
Observable和Observer怎么建立关系?送奶机构怎么知道给谁送牛奶?
通过subscribe函数,这样observer就和observable建立了观察和被观察的关系了。
4 subscription
Observable和Observer之间的关系,谁去维护呢?订阅牛奶的订单谁去管呢?
那么就是subscription来管理Observable和Observer之间的关系。
5 unsubscribe
unsubscribe解除Observable和Observer之间关系,牛奶不再送了。
6 中断的概念
Observable的函数体如果出错或complete,那么函数体就会停止执行,再有next也不会执行,如果函数体是下面代码这样执行的,因为setTimeout里面的next(那么observer.next(4)是不会执行的。