BACK
Уроки55. Project: custom operator для debug-логов
Уроки · 55

55. Project: custom operator для debug-логов

Проект 7 — свой оператор

Когда одна и та же цепочка операторов нужна в нескольких местах, её можно оформить как переиспользуемый оператор. Это полностью легитимный приём, и он не требует никакой магии — оператор это просто функция определённой формы.

Форма пользовательского оператора

function myOperator(arg1, arg2) {
  return source$ => source$.pipe(
    // обычные операторы
  );
}

// Использование:
stream$.pipe(myOperator(...))

Ключевое: возвращаемая функция принимает source$ и возвращает преобразованный Observable. Это и есть сигнатура «оператора».

Что нужно сделать

  1. В debugLabel верните функцию: return source$ => source$.pipe(tap(value => events.push(label + ': ' + value)));
  2. Значения после tap идут дальше без изменений — это важно.

Детерминированная проверка

В этой задаче проверка идет через виртуальное время TestScheduler. Если решение верное, в консоли появится только Test Passed!. Не добавляйте лишние console.log, иначе проверка провалится.

Решение spoiler · click to reveal
const { tap } = Rx;

function debugLabel(label, events) {
  return source$ => source$.pipe(
    tap(value => events.push(label + ': ' + value))
  );
}
script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...