Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Паралелно програмиране / Обещания
Състоянието на обещание 🆕
Обещанието винаги е в едно от три състояния, съобщавани от метода му
.status:
Planned— още не е уредено;Kept— приключило е със стойност;Broken— работата му е хвърлила изключение.
Това са стойностите на изброения тип PromiseStatus.
Четенето на .status не чака — то ви казва къде е обещанието
точно сега, така че можете да го проверите и преди то да се
уреди, и после:
my $p = start { sleep 1; 10 };
say $p.status; # Planned — прочетено веднага, докато блокът още работи
await $p; # сега изчакваме да приключи
say $p.status; # Kept
say $p.result; # 10.result дава запазената стойност. За разлика от
.status, той чака, докато обещанието се уреди,
така че върху неприключило обещание блокира точно като
await. А ако обещанието е било счупено,
.result хвърля изключението отново.
Когато искате да погледнете провала, без да го хвърляте отново,
използвайте .cause — обекта на изключението на счупеното
обещание:
my $p = start { die 'boom' };
try await $p; # оставяме го да се уреди (и поглъщаме повторно хвърлената грешка)
say $p.status; # Broken
say $p.cause.message; # boomТака .status и .cause разглеждат
обещанието, без да го безпокоят, докато await и
.result събират изхода му — стойността или повторно
хвърлената грешка.
Навигация в курса
← Собствено обещание 🆕 | Обети (Vow) 🆕 →
💪 Или преминете направо към упражненията в този
раздел.