Уроки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. Это и есть сигнатура «оператора».
Что нужно сделать
- В
debugLabelверните функцию:return source$ => source$.pipe(tap(value => events.push(label + ': ' + value))); - Значения после
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
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...