Rxjs Observer

Observer

what is Observer? Observer(观察者)是 Observable(可观察对象)推送的数据的消费者。在 Rxjs 中,Observer 是由回调组成的对象,对象的键名分别为:nexterrorcomplete,以此接受 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 的使用,只需要在subscribeObservable 时,把 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),
};

subscribeObservable 的时候,可以直接把函数作为参数传递给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三个方法。

COMMENT ON: