Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Реактивне програмування / await / Вправи / Дочекайтеся збою
Розв’язання: Дочекайтеся збою
Ось одне з можливих розв’язань задачі.
Код
my $p = start { die 'boom' };
try {
await $p;
CATCH {
default { say "caught: {.message}" }
}
}🦋 Знайдіть програму у файлі await-failure.raku.
Вивід
caught: boomКоментарі
Блок обіцянки кидає виняток, тож обіцянку зламано. Виняток не втрачається — він тримається доти, доки хтось не дочекається обіцянки.
await $pповторно кидає його просто там, де фазерCATCHобробляє його як будь-який звичайний виняток. Саме так помилки у фоновій роботі виринають там, де ви чекаєте на результат.