RxJS - 运算符

运算符是 RxJS 的重要组成部分。运算符是一个纯函数,它将可观察对象作为输入,输出也是一个可观察对象。

使用运算符

运算符是一个纯函数,它将可观察对象作为输入,输出也是一个可观察对象。

要使用运算符,我们需要一个 pipe() 方法。

使用 pipe() 的示例

let obs = of(1,2,3); // 一个可观察对象
obs.pipe(
   operator1(),
   operator2(),
   operator3(),
   operator3(),
)

在上面的例子中,我们使用 of() 方法创建了一个可观察对象,该方法接受值 1、2 和 3。现在,在这个可观察对象上,您可以使用 pipe() 方法使用任意数量的运算符执行不同的操作,如上所示。运算符的执行将在给定的可观察对象上按顺序进行。

下面是一个工作示例 −

import { of } from 'rxjs';
import { map, reduce, filter } from 'rxjs/operators';

let test1 = of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
let case1 = test1.pipe(
   filter(x => x % 2 === 0),
   reduce((acc, one) => acc + one, 0)
)
case1.subscribe(x => console.log(x));

Output

30

在上面的例子中,我们使用了过滤运算符来过滤偶数,接下来我们使用了 reduce() 运算符来添加偶数值并在订阅时给出结果。

下面是我们将要讨论的 Observable 列表。

  • 创建
  • 数学
  • 连接
  • 转换
  • 过滤
  • 实用程序
  • 条件
  • 多播
  • 错误处理

创建运算符

以下是我们将在创建运算符类别 − 中讨论的运算符

Sr.No 操作符和说明
1 ajax

此操作符将对给定的 URL 发出 ajax 请求。

2 from

此操作符将从数组、类似数组的对象、承诺、可迭代对象或类似可观察对象创建可观察对象。

3 fromEvent

此运算符将输出可观察对象,用于发出事件的元素,例如按钮、点击等。

4 fromEventPattern

此运算符将从用于注册事件处理程序的输入函数创建一个可观察对象。

5 interval

此运算符将为每个时间创建一个可观察对象给定..

6 of

此运算符将接受传递的参数并将其转换为可观察变量。

7 range

此运算符将创建一个可观察变量,它将根据提供的范围为您提​​供一系列数字。

8 throwError

此运算符将创建一个可观察对象,用于通知错误。

9 timer

此操作符将创建一个可观察对象,该可观察对象将在超时后发出值,并且该值将在每次调用后不断增加。

10 iif

此操作符将决定订阅哪个可观察对象。

数学运算符

以下是我们将要在数学运算符类别中讨论的运算符 −

Sr.No 运算符 &描述
1 Count

count() 运算符接收带有值的 Observable,并将其转换为将提供单个值的 Observable

2 Max

Max 方法将接收带有所有值的 Observable,并返回带有最大值的 Observable

3 Min

Min 方法将接受包含所有值的可观察变量并返回包含最小值的可观察变量。

4 Reduce

在 Reduce 运算符中,累加器函数用于输入可观察变量,累加器函数将以可观察变量的形式返回累积值,并将可选的种子值传递给累加器函数。

reduce() 函数将接受 2 个参数,一个是累加器函数,第二个是种子值。

连接运算符

以下是我们使用的运算符将在 Join 运算符类别中讨论。

Sr.No 运算符 &描述
1 concat

此运算符将按顺序发出作为输入的 Observable,然后继续执行下一个。

2 forkJoin

此运算符将作为输入放入数组或字典对象中,并等待 Observable 完成并返回从给定 Observable 发出的最后值。

3 merge

此运算符将接收输入可观察对象,并将发出可观察对象中的所有值并发出一个输出可观察对象。

4 race

它将返回一个可观察对象,该可观察对象将是第一个源可观察对象的镜像副本。

转换运算符

以下是我们将在转换运算符类别中讨论的运算符。

Sr.No 操作符和说明
1 buffer

缓冲区对可观察对象进行操作,并将参数作为可观察对象。它将开始在数组中缓冲其原始可观察对象上发出的值,并在作为参数的可观察对象发出时发出相同的值。一旦作为参数的可观察对象发出,缓冲区就会重置并再次开始在原始对象上缓冲,直到输入的可观察对象发出,并重复相同的场景。

2 bufferCount

对于 buffercount() 运算符,它将从调用它的可观察对象中收集值,并在给定给 buffercount 的缓冲区大小匹配时发出相同的值。

3 bufferTime

这类似于 bufferCount,因此在这里,它将从调用它的可观察对象中收集值并发出bufferTimeSpan 已完成。它接受 1 个参数,即 bufferTimeSpan

4 bufferToggle

对于 bufferToggle(),它接受 2 个参数,openings 和 closingSelector。打开的参数是可订阅的或承诺启动缓冲区,第二个参数 closingSelector 再次可订阅或承诺指示关闭缓冲区并发出收集的值。

5 bufferWhen

此运算符将以数组形式提供值,它接受一个参数作为函数,该函数将决定何时关闭、发出和重置缓冲区。

6 expand

expand 运算符接受一个函数作为参数,该函数以递归方式应用于源可观察对象以及输出observable。最终值是 observable。

7 groupBy

在 groupBy 运算符中,输出根据特定条件分组,这些组项作为 GroupedObservable 发出。

8 map

在 map 运算符的情况下,对源 Observable 上的每个值应用投影函数,并将相同的输出作为 Observable 发出。

9 mapTo

每次源 Observable 发出一个值时,都会随 Observable 一起给出一个常量值作为输出。

10 mergeMap

在 mergeMap 运算符的情况下,将对每个源值应用一个投影函数,并将其输出与输出 Observable 合并。

11 switchMap

在 switchMap 运算符的情况下,将对每个源值应用一个投影函数,并将其输出与输出 Observable 合并,并且给出的值是最新投影的 Observable。

12 window

它接受一个参数 windowboundaries,它是一个可观察对象,并在给定的 windowboundaries 发出时返回一个嵌套的可观察对象

过滤运算符

以下是我们将在过滤运算符类别中讨论的运算符。

Sr.No 运算符 &描述
1 debounce

一段时间后从源 Observable 发出的值,发射由作为 Observable 或承诺给出的另一个输入决定。

2 debounceTime

仅在时间完成后才会从源 Observable 发出值。

3 distinct

此运算符将给出源可观察对象中与前一个值不同的所有值。

4 elementAt

此运算符将根据给定的索引给出源可观察对象的单个值。

5 filter

此运算符将根据谓词函数过滤源可观察对象中的值给出。

6 first

此运算符将给出源 Observable 发出的第一个值。

7 last

此运算符将给出源 Observable 发出的最后一个值。

8 ignoreElements

此运算符将忽略所有值来自源 Observable 并仅执行对完成或错误回调函数的调用。

9 sample

此运算符将提供来自源 Observable 的最新值,输出将取决于传递给它的参数。

10 skip

此运算符将返回一个可观察对象,该可观察对象将跳过作为输入的 count 项的第一次出现。

11 throttle

此运算符将输出并忽略源可观察值,时间由作为参数的输入函数确定,并将重复相同的过程。

实用运算符

以下是我们将在实用运算符类别中讨论的运算符。

Sr.No 运算符和说明
1 tap

此运算符将具有与源可观察值相同的输出,并可用于将可观察值记录给用户。主要值,如果有错误或任务已完成,则为错误。

2 delay

此运算符根据给定的超时延迟从源 Observable 发出的值。

3 delayWhen

此运算符根据作为输入的另一个 Observable 的超时延迟从源 Observable 发出的值。

4 observeOn

此运算符基于输入的调度程序,将从源 Observable 重新发出通知。

5 subscribeOn

此运算符有助于根据作为输入的调度程序异步订阅源 Observable。

6 timeInterval

此运算符将返回一个对象,其中包含当前值以及使用调度程序输入计算出的当前值与上一个值之间的时间间隔已采取。

7 timestamp

返回时间戳以及源 Observable 发出的值,该值告知发出该值的时间。

8 timeout

如果源 Observable 在给定的超时后未发出值,此运算符将引发错误。

9 toArray

累积来自 Observable 的所有源值,并在源完成时将它们作为数组输出。

条件运算符

以下是我们将在条件运算符类别中讨论的运算符。

Sr.No 运算符 &描述
1 defaultIfEmpty

如果源可观察对象为空,此运算符将返回默认值。

2 every

它将根据输入函数是否满足源可观察对象上每个值的条件返回一个可观察对象。

3 find

当源 Observable 的第一个值满足作为输入的谓词函数的条件时,这将返回可观察对象。

4 findIndex

此基于输入调度程序的运算符将重新发出来自源 Observable 的通知。

5 isEmpty

如果输入可观察对象进行完整回调,此运算符将使输出为 true不发出任何值,如果输入可观察对象发出任何值,则返回 false。

多播运算符

以下是我们将在多播运算符类别中讨论的运算符。

Sr.No 操作符和说明
1 multicast

多播操作符与其他订阅者共享创建的单个订阅。多播接收的参数是主题或工厂方法,它返回具有 connect() 方法的 ConnectableObservable。要订阅,必须调用 connect() 方法。

2 publish

此操作符返回 ConnectableObservable,需要使用 connect() 方法订阅可观察对象。

3 publishBehavior

publishBehaviour 使用 BehaviourSubject,并返回 ConnectableObservable。必须使用 connect() 方法来订阅创建的可观察对象。

4 publishLast

publishBehaviour 使用 AsyncSubject,并返回 ConnectableObservable。必须使用 connect() 方法来订阅创建的可观察对象。

5 publishReplay

publishReplay 使用行为主体,它可以缓冲值并将其重播给新订阅者并返回 ConnectableObservable。必须使用 connect() 方法来订阅创建的可观察对象。

6 share

它是 mutlicast() 运算符的别名,唯一的区别是您不必手动调用 connect () 方法来启动订阅。

错误处理运算符

以下是我们将在错误处理运算符类别中讨论的运算符。

Sr.No 运算符 &描述
1 catchError

此操作符通过返回新的 Observable 或错误来捕获源 Observable 上的错误。

2 retry

如果出现错误,此操作符将负责在源 Observable 上重试,并且将根据给定的输入计数进行重试。