Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Reaktīvā programmēšana / Dzīvie un pēc pieprasījuma supply
Dzīvie supply darbībā
Tā kā dzīva supply pārraida tiem pieslēgumiem, kas tobrīd klausās,
vairāki klausītāji var sekot vienai un tai pašai straumei uzreiz — un
katrs var pievienoties vai aiziet, kad vien vēlas. Šeit divi klausītāji
vēro notikumu straumi: log, kas pieraksta visu, un
alert, kas pievienojas vēlāk un aiziet agrāk.
my $supplier = Supplier.new;
my $events = $supplier.Supply;
my $log = $events.tap(-> $v { say "log: $v" }); # pievienojas pirmais klausītājs
$supplier.emit('start');
my $alert = $events.tap(-> $v { say "alert: $v" }); # pievienojas otrs klausītājs
$supplier.emit('warning');
$supplier.emit('all clear');
$log.close; # pirmais klausītājs aiziet
$supplier.emit('stop');Tas izdrukā:
log: start
log: warning
alert: warning
log: all clear
alert: all clear
alert: stopAbu pieslēgumu dzīves cikls sakārtojas šādi — 🟢 apzīmē pieslēguma pievienošanos, 🔴 tā aiziešanu un ✅ katru vērtību, ko pieslēgums tiešām saņem:
| Solis | log |
alert |
|---|---|---|
$events.tap → log |
🟢 pievienojas | |
emit 'start' |
✅ start | |
$events.tap → alert |
🟢 pievienojas | |
emit 'warning' |
✅ warning | ✅ warning |
emit 'all clear' |
✅ all clear | ✅ all clear |
$log.close |
🔴 aiziet | |
emit 'stop' |
✅ stop |
Tukša šūna nozīmē, ka šis pieslēgums neklausījās brīdī, kad vērtība tika izsūtīta. Sekojiet laika līnijai:
.tapatgriežTapobjektu — turekli, ko paturat, lai vadītu šo vienu abonementu.starttiek izstarots, kamēr klausās tikailog, tāpēc to redz tikailog. Šis atkal ir dzīvās supply likums:alertpievienojās pēcstart, un dzīva supply pagātni neatkārto, tāpēcalertto nekad neredz.warningunall cleartiek izstaroti, kamēr pieslēgti ir abi, tāpēc katra vērtība nonāk pie abiem — tādā secībā, kādā pieslēgumi abonējās: vispirmslog, tadalert.$log.closeizsaukums aiziet no supply. No tā brīžalognesaņem neko, tāpēc pēdējaisstopnonāk tikai piealert.
Divas lietas, kas jāpaņem līdzi. Pirmkārt, viena dzīva supply var
izvērsties daudzos neatkarīgos pieslēgumos vienlaikus. Otrkārt, katrs
pieslēgums ir savs abonements ar savu mūžu: paturiet Tap
objektu, ko atgriež .tap, un jūs varēsiet šo vienu
klausītāju izbeigt ar .close, netraucējot pārējos.
Kursa navigācija
← Dzīvie supply | Divi pieslēgumi →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.