Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Реактивно програмиране / await / Изчакване на обещание
Тест — await и sleep
Какво прави следната програма?
my $p = start { sleep 2; 42 };
say 'waiting';
say await $p;| 1 | Отпечатва waiting веднага, а около две секунди по-късно отпечатва 42 |
| 0 | Спира за две секунди, после отпечатва waiting и 42 заедно |
| 0 | Отпечатва waiting и 42 веднага — спането става във фонов режим |
| 0 | Отпечатва waiting, после Promise — спящо обещание не може да се изчаква |
start връща обещание незабавно — блокът
със своя sleep се изпълнява във фонова нишка. Затова
say 'waiting' се изпълнява веднага. Блокира именно
await: програмата спира там, докато фоновият блок не
приключи двусекундната си дрямка и не даде 42, което после
се отпечатва. Паузата принадлежи на реда с await, а не на
реда със start.