`anyof`

anyof (여러 Promise 중 하나라도 끝나길 기다리기)

여러 비동기 작업을 띄워놓고, 그중 어느 하나라도 마무리되는 순간을 포착하고 싶은 경우가 있어요. 예를 들어 시간 제한을 걸 때죠. 그럴 때 Promise.anyof가 유용해요.

출처: Raku Documentation — method anyof

본문

Promise

method anyof(Promise:U: *@promises --> Promise:D)

인자로 넘긴 Promise 중 어느 하나라도 kept나 broken이 되는 즉시 kept되는 새 Promise를 돌려줘요. 완료된 Promise의 결과는 반환되는 Promise의 결과에 반영되지 않고, 반환 Promise는 항상 Kept 상태가 돼요.

이걸 쓰면 Promise를 최대 몇 초까지만 기다리는 식의 처리를 만들 수 있어요.

my $timeout = 5;
await Promise.anyof(
    Promise.in($timeout),
    start {
        # do a potentially long-running calculation here
    },
);