Уроки12. interval и take
Уроки · 12
12. interval и take
interval — бесконечный таймер
interval(period) начинает «тикать» через указанный период. Сначала ждёт period миллисекунд, потом выдаёт 0, потом ещё period мс — выдаёт 1, и так далее. Сам по себе он никогда не завершается.
interval(10)
// 10мс → 0 → 10мс → 1 → 10мс → 2 → ... (бесконечно)
Первый «оператор-помощник» — take
Чтобы безопасно ограничить такой поток, есть оператор take(N). Он пропускает первые N значений и сразу же завершает поток через complete.
interval(10).pipe(take(3))
// 10мс → 0 → 10мс → 1 → 10мс → 2 → complete()
Глоссарий
pipe(...)— метод Observable, который позволяет «пропустить» поток через цепочку операторов. Каждый оператор может фильтровать, трансформировать или ограничивать значения.- Оператор — функция, которая принимает Observable и возвращает новый Observable с изменённым поведением.
take— наш первый оператор.
Внимание
interval без ограничения — частая причина утечек. В реальных приложениях после него почти всегда стоит take, takeUntil или другой способ остановки.
Что нужно сделать
- Внутри
interval(10).pipe(...)добавьтеtake(3). - Это ограничит поток первыми тремя значениями:
0,1,2. - Marble-проверка ожидает именно такое поведение.
Детерминированная проверка
В этой задаче проверка идет через виртуальное время TestScheduler. Если решение верное, в консоли появится только Test Passed!. Не добавляйте лишние console.log, иначе проверка провалится.
Решение spoiler · click to reveal
const { interval, take } = Rx;
const ticks$ = interval(10).pipe(
take(3)
); script.ts
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...