Курс по 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 го обработва като всяко обикновено изключение. Точно така грешките във фоновата работа изплуват там, където чакате резултата.

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

Изчакайте отказ   |   Уеб програмиране