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

Очікування завершення

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

my @values;

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

say [+] @values; # 12

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

Це корисний підхід: скористайтеся блоком react, щоб зібрати все, що видає потік значень, а потім працюйте зі зібраним результатом у наступному рядку, будучи певними, що потік завершено. Чи чекаєте ви обіцянку через await, чи потік значень через react, принцип той самий — зупинись, поки конкурентна робота не завершиться, а потім продовжуй з її результатами.

Навігація курсом

Тест — await і sleep   |   Дочекайтеся промиса


💪 Або перейдіть одразу до вправ цього розділу.