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

Ожидание завершения

await — это явный способ ждать, но реактивный код тоже ждёт, только неявно. Блок react не завершится, пока не закончатся все supply, за которыми он следит, а это даёт ту же гарантию «всё завершилось»:

my @values;

react {
    whenever Supply.from-list(2, 4, 6) {
        @values.push($_);
    }
}

say [+] @values; # 12

say выполняется только после того, как блок react закончил работу, поэтому @values уже содержит все выданные значения. По сути блок react дождался потока за вас.

Это полезный приём: соберите блоком react всё, что выдаёт supply, а затем работайте с собранным на следующей строке, будучи уверенными, что поток закончился. Ждёте ли вы промис через await или поток через react — принцип один: приостановиться, пока конкурентная работа не завершится, а затем продолжить с её результатами.

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

Тест — await и sleep   |   Дождитесь промиса


💪 Или перейдите сразу к упражнениям этого раздела.