Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Реактивное программирование / react и whenever
whenever
Один блок react может содержать
несколько блоков whenever, каждый из
которых следит за своим supply. Блок реагирует на тот supply, который
выдал значение следующим, и выполняет соответствующее тело:
my $sum = 0;
react {
whenever Supply.from-list(1, 2, 3) {
$sum += $_;
}
whenever Supply.from-list(10, 20) {
$sum += $_;
}
}
say $sum; # 36За обоими supply следят одновременно. Их значения —
1, 2, 3 и 10, 20 — стекаются в
$sum, которая в итоге равна 36. Блок
react завершается, только когда закончатся
оба supply.
Каждый whenever реагирует независимо, и именно так
объединяют потоки: по одному whenever на источник, все
внутри одного react. Настоящая программа могла бы следить
за сетевым соединением в одном whenever и за таймером в
другом, отвечая на события каждого по мере их поступления.
В теле whenever вам доступно выданное значение (как
$_ или именованный параметр), и с ним можно делать что
угодно: обновлять состояние, выдавать значения в другой supply или даже
досрочно закрыть блок react вызовом done.
Практика
Пройдите 2 теста по содержанию этой темы.
Навигация по курсу
← Тест — react | Тест — whenever →
💪 Или перейдите сразу к упражнениям этого
раздела.