Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Реактивно програмиране / await / Exercises / Изчакайте отказ
Решение: Изчакайте отказ
Ето едно възможно решение на задачата.
Код
my $p = start { die 'boom' };
try {
await $p;
CATCH {
default { say "caught: {.message}" }
}
}🦋 Намерете програмата във файла await-failure.raku.
Изход
caught: boomКоментари
Блокът на обещанието хвърля изключение, така че обещанието е счупено. Изключението не се губи — то се задържа, докато някой не изчака обещанието.
await $pго хвърля отново точно там, където фазерътCATCHго обработва като всяко обикновено изключение. Точно така грешките във фоновата работа изплуват там, където чакате резултата.