Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Реактивное программирование / await / Exercises / Дождитесь сбоя

Решение: Дождитесь сбоя

Вот один из возможных вариантов решения задачи.

Код

my $p = start { die 'boom' };

try {
    await $p;
    CATCH {
        default { say "caught: {.message}" }
    }
}

🦋 Исходный код можно найти в файле await-failure.raku.

Вывод

caught: boom

Комментарии

  1. Блок промиса бросает исключение, поэтому промис оказывается сломан. Исключение не теряется — оно удерживается, пока кто-нибудь не дождётся промиса.

  2. await $p перебрасывает его прямо там, и фазер CATCH обрабатывает его как любое обычное исключение. Так ошибки фоновой работы всплывают там, где вы ждёте её результата.

Навигация по курсу

Дождитесь сбоя   |   Веб-программирование