Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Реактивно програмиране / Живи 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 тласка стойност в живия поток и всяко текущо включване я получава. Включването беше налице преди подаванията, така че то улови и двете стойности.

Решаващата разлика спрямо потока при поискване е времето: живият поток не помни минали стойности. Включване, добавено след emit, би пропуснало всичко, подадено преди абонирането му. Живите потоци са правилният модел за истински събития — щраквания, съобщения, показания на датчици, — където има значение „какво се случва сега“, а миналото е отминало.

Накратко: използвайте поток при поискване, за да пуснете фиксирана последователност на всеки абонат, и жив поток (чрез Supplier), за да излъчвате събития в момента на случването им.

Навигация в курса

Тест — Видове supply   |   Живи supply в действие


💪 Или преминете направо към упражненията в този раздел.