Курс 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) 🆕 →
💪 Або перейдіть одразу до вправ цього розділу.