Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Реактивне програмування / react і whenever

whenever

Один блок react може містити кілька блоків whenever, і кожен стежитиме за своїм потоком значень. Блок реагує на той потік, що видасть значення наступним, виконуючи відповідне тіло:

my $sum = 0;

react {
    whenever Supply.from-list(1, 2, 3) {
        $sum += $_;
    }
    whenever Supply.from-list(10, 20) {
        $sum += $_;
    }
}

say $sum; # 36

За обома потоками стежать водночас. Їхні значення — 1, 2, 3 та 10, 20 — усі втікають у $sum, який завершується на 36. Блок react завершується лише тоді, коли завершаться обидва потоки.

Кожен whenever реагує незалежно, і саме так ви поєднуєте струмені: по одному whenever на джерело, і всі всередині того самого react. Справжня програма могла б стежити за мережевим з’єднанням в одному whenever і за таймером в іншому, відгукуючись на кожен у міру надходження його подій.

У тілі whenever вам доступне видане значення (як $_ або як іменований параметр), і робити з ним можна що завгодно — оновити стан, видати щось в інший потік або навіть достроково закрити блок react через done.

Практика

Виконайте 2 тести за змістом цієї теми.

Навігація курсом

Тест — react   |   Тест — whenever


💪 Або перейдіть одразу до вправ цього розділу.