Kurso de Raku / Funkcia, samtempa, reaktiva kaj reta programado / Samtempa programado / Promesoj
Propra promeso 🆕
Ĉiu ĝisnuna promeso venis de start. Sed vi povas ankaŭ
krei unu rekte per Promise.new — promeson, kiu ankoraŭ ne
finiĝis — kaj decidi ĝin mem, kiam la rezulto (aŭ la novaĵo) estas
preta. .keep plenumas ĝin per valoro:
my $p = Promise.new; # freŝa, ankoraŭ nedecidita promeso
$p.keep(42); # plenumu ĝin per valoro
say await $p; # 42.break estas la malsukcesa kazo. Atendi rompitan
promeson reĵetas la eraron, ĝuste kiel ĉe bloko start, kiu
mortis — kaj se
nenio kaptas ĝin, tiu escepto haltigas la programon:
my $p = Promise.new;
$p.break('disk full');
say await $p; # mortas ĉi tie kun 'disk full'
say 'never reached'; # ĉi tiu linio ne plenumiĝasPor daŭrigi, kaptu la malsukceson per try, precize kiel
vi farus ĉirkaŭ ajna kodo, kiu povus morti:
my $p = Promise.new;
$p.break('disk full');
my $result = try await $p;
say $result // "the job failed: $!"; # the job failed: disk fullSe la rezulto jam estas konata, du mallongigoj faras promeson, kiu
ekestas jam decidita: Promise.kept($value) kaj
Promise.broken($error).
say await Promise.kept(7); # 7Kial fari promeson mane? Ĉar ne ĉiu rezulto venas de bloko
start. Evento, kiu okazas poste, mesaĝo, kiu alvenas,
revoko el alia biblioteko — Promise.new ebligas al vi
transformi ĉiun el ĉi tiuj en promeson, kiun la cetero de la programo
povas await-i kaj kombini kiel ajnan alian.
Kursa navigado
← Kvizo — Kombini promesojn | La stato de promeso 🆕 →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.