Курс языка программирования 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 в действии


💪 Или перейдите сразу к упражнениям этого раздела.