如何理解RXJS(2)——operators的使用

在上一节中,咱们讨论了observable的工做原理和建立过程,那么在这一节中,咱们来介绍observable类所具备的一系列方法,经过这些方法,咱们能够更加灵活地使用observable变量。this

Operators的使用 Operators是observable类拥有的一系列public method,本节咱们经过实际代码来演练一些经常使用的operator,并看看他们输出的结果。code

1.maporm

map方法的做用是对每一个observable对象发出的值,根据必定的规则进行映射。以下:对象

source_from = Observable.from('123').map(x => x + 's ');

能够获得结果rxjs

map

相似的还有mapTo方法,能够将发出的值映射为固定值。图片

2.zipip

zip方法能够将两个observable序列合并为一个observable序列。以下文档

source_from = Observable.from('123');
  source_interval = Observable.interval(1000);
  source_zip = this.source_from.zip(this.source_interval, (x, y) => x);

经过以上方法,就能够将interval和from方法进行结合,一、二、3会在相隔1s后相继输出,再输出complete。it

3.scanio

scan方法相似于reduce方法,对发出的值进行accumulation的处理。以下:

source_from = Observable.from('Andrew');
  source_interval = Observable.interval(1000);
  source_zip = this.source_from.zip(this.source_interval, (x, y) => x);
  source_scan = this.source_zip.scan((origin, next) => origin + next, 's');

能够获得这样的输出结果:

scan

4.filter

filter方法能够对发出的值进行过滤操做,并制定过滤条件。以下:

source_from = Observable.from([1, 2, 3, 4, 5, 6, 7]);
  source_interval = Observable.interval(1000);
  source_zip = this.source_from.zip(this.source_interval, (x, y) => x);
  source_filter = this.source_zip.filter((x) => x % 2 !== 0);

则能够看到以下的输出:

filter

5.take

take方法能够制定观察者接收到的值的数量,在达到指定数量后,则会调用观察者的complete方法。

source_from = Observable.from([1, 2, 3, 4, 5, 6, 7]);
  source_interval = Observable.interval(1000);
  source_zip = this.source_from.zip(this.source_interval, (x, y) => x);
  source_filter = this.source_zip.take(3);

则能够获得以下的输出:

输入图片说明

6.distinct

distinct能够对一系列发送的值进行去重操做。

source_from = Observable.from([1, 2, 2, 6, 5, 6, 7, 4, 4]);
  source_interval = Observable.interval(1000);
  source_zip = this.source_from.zip(this.source_interval, (x, y) => x);
  source_distinct = this.source_zip.distinct();

那么能够获得这样的输出:

输入图片说明

到目前为止,咱们仅仅介绍了不少operator中的6个,事实上,对于不一样情形,operator能够分为creation, filter, combination, transformation等等的功能,建议你根据本身的需求去查阅rxjs的官方文档,进行合适的使用。

相关文章
相关标签/搜索