Курс по 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


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