Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Реактивное программирование / Живые supply и supply по требованию
Живые supply
Живой supply транслирует значения по мере их появления тем
подключениям, которые слушают в этот момент. Создают
его с помощью Supplier: поставщик — это передающая сторона,
а его .Supply — принимающая, к которой подключаются
другие.
my $supplier = Supplier.new;
my $supply = $supplier.Supply;
my @got;
$supply.tap(-> $v { @got.push($v) });
$supplier.emit(1);
$supplier.emit(2);
say @got; # [1 2]Здесь .emit проталкивает значение в живой supply, и его
получает каждое текущее подключение. Подключение существовало до выдачи
значений, поэтому оно перехватило оба.
Принципиальное отличие от supply по требованию — во времени: живой
supply не помнит прошлых значений. Подключение,
добавленное после emit, пропустило бы всё, что было выдано
до его подписки. Живые supply — правильная модель для настоящих событий:
щелчков мыши, сообщений, показаний датчиков, — где важно «что происходит
сейчас», а прошлое уже ушло.
Коротко: supply по требованию нужен, чтобы проигрывать фиксированную
последовательность каждому подписчику, а живой supply (через
Supplier) — чтобы транслировать события по мере их
наступления.
Навигация по курсу
← Тест — Виды supply | Живые supply в действии →
💪 Или перейдите сразу к упражнениям этого
раздела.