Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Reaktīvā programmēšana / react un whenever / whenever
Viktorīna — whenever un done
Ko izdrukā šī programma?
my @out;
react {
whenever Supply.from-list(1, 2, 3) {
@out.push($_);
done if $_ == 2;
}
whenever Supply.from-list(10, 20) {
@out.push($_);
}
}
say @out;| 1 | [1 2] |
| 0 | [1 2 10 20] |
| 0 | [1 2 3 10 20] |
| 0 | [10 20] |
Pirmais whenever ieliek masīvā 1, tad
2 — un pie 2 tas izsauc done.
Būtiskais ir tas, ka done izbeidz visu
react bloku, nevis tikai savu
whenever: pirmās supply atlikums (3) un
visa otrā supply (10, 20) tiek nogriezti, pirms
tie tiek piegādāti. Tāpēc @out satur tikai
[1 2]. Ja done apklusinātu vienīgi savu
straumi, jūs redzētu [1 2 10 20] — bet viens
done aptur visas reakcijas uzreiz.