Observer
what is 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 作为参数传递给subscribe
方法即可。
observable.subscribe(observer);
Observers are just objects with three callbacks, one for each type of notification that an Observable may deliver.
在 Rxjs 中,Observer 中的next
,error
,complete
三个处理逻辑是可以部分缺失的,即使缺失了部分,Observable 仍能正常运行的,只不过是对应的处理逻辑会被忽略,因为没有定义相应的处理逻辑,Observable 也就无法处理的。
下面例子中的 Observer 就缺少了complete
的处理逻辑:
var observer = {
next: (x) => console.log("Observer got a next value: " + x),
error: (err) => console.error("Observer got an error: " + err),
};
在subscribe
Observable 的时候,可以直接把函数作为参数传递给subscribe
方法,而不用传入整个 Observer 对象,当只传入一个函数的时候,Rxjs 在内部会创建一个只含有next
处理逻辑的 Observer。
observable.subscribe((x) => console.log("Observer got a next value: " + x));
当然你也可以把next
,error
,complete
的回调函数作为参数全部传入subscribe
方法:
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")
);
上面的例子,在 Observable 的内部,依然可以正常的调用observer.next
,observer.error
,observer.complete
三个方法。