Observer(视察者)
什么是Observer? Observer(视察者)是Observable(可视察对象)推送数据的消费者。在RxJS中,Observer是一个由回调函数构成的对象,键名离别为next
、error
和 complete
,以此接收Observable推送的差别范例的关照,下面的代码段是Observer的一个示例:
var observer = {
next: x => console.log('Observer got a next value: ' + x),
error: err => console.error('Observer got an error: ' + err),
complete: () => console.log('Observer got a complete notification'),
};
挪用Observer逻辑,只需在subscribe
(定阅)Observable后将Observer传入:
observable.subscribe(observer);
在RxJS中,Observer是可选的。在next
、error
和 complete
处置惩罚逻辑部份缺失的情况下,Observable依然能一般运转,为包括的特定关照范例的处置惩罚逻辑会被自动疏忽。
下面例子中Observer并不包括complete
范例关照的处置惩罚逻辑:
var observer = {
next: x => console.log('Observer got a next value: ' + x),
error: err => console.error('Observer got an error: ' + err),
};
在定阅Observable时,你以至可以把回调函数作为参数传入,而不是传入完全的Observer对象:
observable.subscribe(x => console.log('Observer got a next value: ' + x));
在RxJS内部,挪用observable.subscribe
时,它会建立一个只要next
处置惩罚逻辑的Observer。固然你也可以将next
、error
和 complete
的回调函数离别传入:
observable.subscribe(
x => console.log('Observer got a next value: ' + x),
err => console.error('Observer got an error: ' + err),
() => console.log('Observer got a complete notification')
);
Subscription
什么是Subscription? Subscription是一个代表可以停止资本的对象,示意一个Observable的实行历程。Subscription有一个主要的要领:unsubscribe
。这个要领不需要传入参数,挪用后便会停止响应的资本。在RxJS之前的版本中,Subscription被称为“Disposable”。
var observable = Rx.Observable.interval(1000);
var subscription = observable.subscribe(x => console.log(x));
subscription.unsubscribe();
Subscription可以经由过程unsubscribe()
函数停止Observable的实行历程并开释响应资本。
Subscription可以嵌套运用:你可以挪用一个Subscription的unsubscribe()
要领来作废一系列嵌套的Subscription。经由过程add
要领,便可以完成Subscription的嵌套:
var observable1 = Rx.Observable.interval(400);
var observable2 = Rx.Observable.interval(300);
var subscription = observable1.subscribe(x => console.log('first: ' + x));
var childSubscription = observable2.subscribe(x => console.log('second: ' + x));
subscription.add(childSubscription);
setTimeout(() => {
// 停止一切嵌套的Subscription
subscription.unsubscribe();
}, 1000);
实行后,控制台会输出一下效果:
second: 0
first: 0
second: 1
first: 1
second: 2
另外,Subscription供应了remove(otherSubscription)
要领,可以删除一个Subscription嵌套的子Subscription。