Middle
38
questionbank

Какие операторы для работы с потоками вы знаете?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

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

Операторы создания (Creation Operators): Используются для создания нового потока данных.

  • of(): Создает поток, который испускает фиксированный набор значений.
    typescript
  • from(): Превращает различные источники данных (Promise, Iterable, ArrayLike) в поток.
    typescript
  • interval(): Создает поток, который испускает последовательные числа через заданный интервал времени.
    typescript
  • timer(): Создает поток, который испускает одно значение после заданного времени, опционально с последующими значениями через интервал.
  • fromEvent(): Создает поток из DOM-событий или EventEmitter.

Операторы трансформации (Transformation Operators): Изменяют значения, испускаемые потоком.

  • map(): Преобразует каждое значение, испускаемое потоком, применяя к нему заданную функцию.
    typescript
  • pluck(): Извлекает свойство из каждого объекта, испускаемого потоком.
  • scan(): Применяет аккумуляторную функцию к каждому значению потока и испускает промежуточные результаты.
  • mergeMap() / flatMap(): Проецирует каждое значение исходного потока в новый поток (Inner Observable) и объединяет (сглаживает) их в один выходной поток. Позволяет выполнять асинхронные операции для каждого значения.
    typescript
  • switchMap(): Похож на mergeMap, но при испускании нового значения исходным потоком отменяет работу предыдущего внутреннего потока. Полезен для автодополнения или запросов с отменой.
  • concatMap(): Похож на mergeMap, но гарантирует, что внутренние потоки будут выполнены последовательно в порядке их создания.

Операторы фильтрации (Filtering Operators): Выборочно пропускают значения, испускаемые потоком.

  • filter(): Пропускает значения из потока только если они удовлетворяют заданному условию.
    typescript
  • take(): Пропускает только первые N значений из потока.
  • takeUntil(): Пропускает значения из потока пока другой поток не испустит значение (сигнал останова).
  • skip(): Пропускает первые N значений из потока.
  • debounceTime(): Испускает значение только после того, как поток прекратил испускать значения в течение заданного времени. Полезен для предотвращения слишком частых действий (например, ввода в поле поиска).
  • distinctUntilChanged(): Испускает значение только если оно отличается от предыдущего испущенного значения.

Операторы комбинирования (Combination Operators): Объединяют несколько потоков в один.

  • combineLatest(): Объединяет значения из нескольких потоков, испуская массив последних значений из каждого потока при каждом изменении одного из входящих потоков.
  • zip(): Объединяет значения из нескольких потоков, испуская массив значений по индексу (первое из первого, первое из второго и т.д.).
  • merge(): Объединяет несколько потоков, испуская значения из них по мере их появления.
  • concat(): Объединяет несколько потоков, выполняя их последовательно (сначала первый до завершения, затем второй и т.д.).

Операторы обработки ошибок (Error Handling Operators): Определяют поведение при ошибках в потоке.

  • catchError(): Перехватывает ошибку в потоке и позволяет продолжить работу потока, либо заменить его другим потоком.
    typescript
  • retry(): Пытается повторно подписаться на поток N раз при возникновении ошибки.

Операторы завершения (Completion Operators): Определяют поведение при завершении потока.

  • finalize(): Выполняет заданное действие при завершении (успешном или с ошибкой) или отмене подписки на поток.
  • tap(): Позволяет выполнять побочные эффекты (например, логирование) без изменения значений потока.

Это далеко не полный, но достаточно важный список операторов, с которыми часто приходится работать во Frontend-разработке, особенно при использовании реактивного подхода.