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