Перейти к содержанию

Операторы и метод pipe()

Для предварительного преобразования отправляемых объектом Observable данных или преобразования и управления самими Observable используются специальные функции - операторы.

from([7, 21, 10])
  .pipe(map((num) => (num <= 10 ? 1 : 0)))
  .subscribe((vl) => console.log(vl));

Здесь в map() каждое число равное или меньше 10 заменяется на 1, если больше - на 0.

Все RxJS операторы подразделяются на категории. Так, различают операторы:

pipe()

Начиная с версии 5.5 в библиотеке RxJS большинство операторов, которые применяются к Observable, объединяются в методе pipe(). Метод вызывается у объекта, а операторы передаются ему в качестве аргументов через запятую в порядке их вызова.

from([30, 41, 60])
  .pipe(
    filter((num) => num % 10 === 0),
    map((num) => num * 2)
  )
  .subscribe((vl) => console.log(vl));

Методу pipe() передаются только те операторы, которые принимают Observable и возвращают Observable. Они находятся в rxjs/operators и называются pipeable operators (англ.).

В RxJS также есть одноименная утилита pipe(), используемая для создания переиспользуемых композиций операторов.

const doubleFilter = <T, R>(
  fn: (value: T, index: number) => R
) => pipe(filter(fn), filter(fn));

Пример приведен только для наглядности. Практическое использование такого оператора не эффективно.

Комментарии