RXJS中的基本操作员
#javascript #网络开发人员 #spanish #rxjs

操作员是一个可观察到的函数,并控制并仅以我们需要的方式来控制我们感兴趣的信息。

地图

它使我们能够转换或提取可观察到的东西散发到不同的事物中,以保持原始流的结构。 kude0是RXJ中最常见,最强大的运营商之一,可广泛用于在可观察的数据中执行转换。

地图的基本语法如下:

observable$.pipe(
  map(valor => nuevoValor)
)

其中$是所需值的可观察数据流,值=>新值是一个转换函数,它将可观察到的每个值发出并返回一个新的转换值。

示例:
值的转换:将作为参数的转换函数应用于可观察到的每个值。此功能采用原始值并返回一个新的变换值。例如:

const numeros$ = of(1, 2, 3, 4, 5); // Observable que emite los números del 1 al 5

numeros$.pipe(
  map(numero => numero * 2) // Transforma cada número emitido por el observable multiplicándolo por 2
).subscribe(resultado => console.log(resultado));

此代码的结果是在控制台上打印:2、4、6、8、10,这是原始值乘以2。

筛选

filter操作员是一个过滤功能,用于仅发布符合指定条件的可观察数据流的元素。换句话说,过滤器允许您选择满足给定条件的可观察到的元素,并丢弃不符合的条件。

过滤器的基本语法如下:

observable$.pipe(
  filter(condicion)
)

其中$是要过滤元素的可观察数据流,并且条件是一个谓词功能,指定要选择的每个元素必须满足的条件。



Kude1允许我们使用任何返回布尔值的谓词功能来评估过滤条件。这提供了极大的灵活性,可以根据可观察到的元素的任何属性或特征来指定复杂条件。

让我们看一个示例:

const personajes = [
    {
      tipo: 'heroe',
      nombre: 'Batman',
    },
    {
      tipo: 'heroe',
      nombre: 'Robin',
    },
    {
      tipo: 'villano',
      nombre: 'Joker',
    },
  ];

  from(personajes)
    .pipe(filter((personaje) => personaje.tipo === 'heroe'))
    .subscribe(console.log);

一个重要的滤波器特征是,在可观察结果中未发出不符合谓词函数中指定条件的元素。这意味着仅发出满足条件的元素,而另一个则被忽略并且不会在数据流中传播。

轻敲

Tap Oterator是一个实用程序操作员,允许在流经可观察到的数据流的元素中进行次要动作或副作用,而不会影响Sã元素的发射或转换。它是在不修改其行为的情况下净化,注册或执行其他逻辑的强大工具。

点击的基本语法如下:

observable$.pipe(
  tap(funcionEfecto)
)

如果可观察的$是需要的可观察数据流,并且功能效应是可观察到的每个元素执行的函数,而无需修改圣经中的元素,并且可以执行任何其他逻辑所需的其他逻辑。

kude4操作员为可观察到的每个元素执行指定的效果函数。效果功能可以是您想要执行的任何其他libic的功能,例如在控制台上打印,注册事件,将数据发送到服务器等。效应函数不会修改圣经中的元素,它仅在â©L。上执行其他操作。

const numeros$ = of(1, 2, 3, 4, 5); // Observable que emite números

numeros$.pipe(
  tap(numero => console.log(`Número emitido: ${numero}`)) // Imprime en la consola cada número emitido
).subscribe();

这种方式在控制台中打印的结果:发行的号码:1,编号:2,编号:3,编号:4,no。>

请务必记住,TAP不会修改可观察到的元素。效应函数与元素的发射并行执行,而无需修改它们。如果要修改发行的元素,则应将其他数据转换操作员与TAP结合使用。

const numeros$ = of(1, 2, 3, 4, 5); // Observable que emite números

numeros$.pipe(
  tap(x => console.log),
  map(val => val * 10)
).subscribe(val => console.log)

结果是10、20、30、40、50

减少

reduce运算符是一个转换操作员,允许将值序列降低一个值,该操作员将累加函数作为参数接收,并将上述函数应用于入口序列发出的值。

累积函数需要两个参数:输入序列发出的累加器和当前值。累加器是到目前为止的累加值,而当前值是当时由序列发出的值。累积函数必须返回将用作累加器的新值的值。

rxjs中运算符的一般形式如下:

reduce(accumulator: function, seed?: any): Observable

accumulator参数是适用于序列发出的值的累积函数。 kude7参数是可选值,将用作累加器的初始值。如果提供了kude7,则累积函数将适用于seed和序列发出的第一个值。如果未提供seed,则累积函数将应用于序列发出的第一个和第二个值。
操作员减少了发出单个值的kude11:积累的最终结果。输入序列完成后发出此值。

有一个示例:

import { of } from 'rxjs';
import { reduce } from 'rxjs/operators';

const source = of(1, 2, 3, 4, 5);

const example = source.pipe(
  reduce((acc, curr) => acc + curr)

example.subscribe(console.log) // salida: 15

在上一个示例中,我们创建了一个kude11,该kude11发出值1,2,3,4,5。积累的最终结果为15,这是在入口顺序完成后发出的。

扫描

scan运算符是一个类似于kude5运算符的转换操作员,但它没有在序列的末尾发出单个值,而是在序列的每个步骤中发出一个累积值。

操作员kude14的一般形式如下:

scan(accumulator: function, seed?: any): Observable

accumulator参数是适用于序列发出的值的累积函数。 kude7参数是可选值,将用作累加器的初始值。如果提供了kude7,则累积函数将适用于seed和序列发出的第一个值。如果未提供seed,则累积函数将应用于序列发出的第一个和第二个值。

kude14操作员返回一个kude11,该kude11在将累加函数应用于入口序列的每个值后发出累积值。

例如:

import { of } from 'rxjs';
import { scan } from 'rxjs/operators';

const source = of(1, 2, 3, 4, 5);

const example = source.pipe(
  scan((acc, curr) => acc + curr)

example.subscribe(console.log) // salida: 1, 3, 6, 10, 15

在此示例中,我们创建了一个发射值1、2、3、4、5的kude11,然后使用添加值的函数函数应用Kude14运算符。将累加函数应用于输入序列的每个值后,累积值将在序列的每个步骤中发出。这种情况是,出口为1、3、6、10、15。

take操作员允许您发布入口序列发出的第一个n值。一旦发出值,该序列就会自动完成并停止。

采用基本语法如下:

take(count: number): Oberservable

count参数指定完成序列之前必须发出的值数量。

有一个示例说明如何在rxjs中使用take运算符

import { interval } from 'rxjs'
import { take } from 'rxjs/operators';

const source = interval(1000);

const example = source.pipe(
  take(5)
);

example.subscribe(console.log) // salida: 0, 1, 2, 3, 4

在此示例中,我们创建一个使用Kude33运算符每秒发出值的Kude11。然后,我们将Kude29操作员以5为5的参数应用,这意味着仅发行了序列发出的前5个值。 Kude35的输出为0、1、2、3、4。

take运算符也可以与其他RXJS运营商结合使用,例如filtermapmergeMap,等等。操纵和限制输入序列发出的值。