Rxjs Observer

November 07, 2017 by Sylvenas

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 的使用,只需要在 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 三个方法。