📅  最后修改于: 2023-12-03 15:19:53.738000             🧑  作者: Mango
RxJS是一个基于可观察对象(Observable)和响应式编程范式的JavaScript库,它可以帮助我们优雅地处理异步数据流和事件流。在最新的更新中,RxJS引入了一些新特性和功能,让我们一起来了解一下。
RxJS新增了一些过滤操作符,让我们可以更方便地对数据流进行过滤。以下是一些常用的过滤操作符:
该操作符帮助我们根据指定条件筛选数据流中的元素。例如,筛选出偶数:
import { of } from 'rxjs';
import { filter } from 'rxjs/operators';
of(1, 2, 3, 4, 5)
.pipe(filter(x => x % 2 === 0))
.subscribe(x => console.log(x)); // 输出2, 4
该操作符帮助我们限制从数据流中获取的元素数量。例如,只获取前3个元素:
import { interval } from 'rxjs';
import { take } from 'rxjs/operators';
interval(1000)
.pipe(take(3))
.subscribe(x => console.log(x)); // 输出0, 1, 2
该操作符帮助我们去重。例如,去重数组中的值:
import { of } from 'rxjs';
import { distinct } from 'rxjs/operators';
of(1, 2, 2, 3, 3, 3)
.pipe(distinct())
.subscribe(x => console.log(x)); // 输出1, 2, 3
RxJS中的观察者模式是单播的,即每个订阅者都会获得一个独立的数据流。然而,有时候我们需要将同一个数据流同时发送给多个订阅者。这就是多播。
在最新版本中,RxJS新增了多播操作符,包括:
该操作符可以将可观察对象转换成多播可观察对象。例如:
import { interval } from 'rxjs';
import { take, share } from 'rxjs/operators';
const obs$ = interval(1000).pipe(take(3), share());
obs$.subscribe(x => console.log('a: ' + x)); // 输出a: 0, a: 1, a: 2
obs$.subscribe(x => console.log('b: ' + x)); // 输出b: 0, b: 1, b: 2
在上面的例子中,我们使用了share
将可观察对象转换为多播可观察对象。当第一个订阅者连接到该对象时,它会启动计时器并开始计时。当第二个订阅者连接到该对象时,它会分享第一个订阅者的计时器。因此,在上面的例子中,两个订阅者都会获得相同的数据流。
该操作符可以将可观察对象转换成可连接的可观察对象并执行多播。例如:
import { interval } from 'rxjs';
import { take, multicast } from 'rxjs/operators';
const obs$ = interval(1000).pipe(take(3), multicast(() => new Subject()));
obs$.subscribe(x => console.log('a: ' + x)); // 输出a: 0, a: 1, a: 2
obs$.subscribe(x => console.log('b: ' + x)); // 输出b: 0, b: 1, b: 2
obs$.connect(); // 启动可连接的可观察对象
在上面的例子中,我们使用了multicast
将可观察对象转换为可连接的可观察对象并执行多播。它需要传入一个函数来创建一个可连接的可观察对象。每个订阅者连接到该对象时,它会开始计时。当第一个订阅者连接到该对象时,它不会启动计时器。当第二个订阅者连接到该对象时,它会分享第一个订阅者的计时器。因此,在上面的例子中,两个订阅者都会获得相同的数据流。
在最新更新中,RxJS引入了一些新特性和功能,包括过滤操作符和多播。这些新特性和功能使得RxJS更加强大和易于使用。如果你还没有使用RxJS,那么现在是开始学习它的好时机。