Corso di Raku / Programmazione funzionale, concorrente, reattiva e web / Programmazione concorrente / Promise
Lo stato di una promise 🆕
Una promise è sempre in uno di tre stati, riferiti dal suo metodo
.status:
Planned— non ancora conclusa;Kept— è finita con un valore;Broken— il suo lavoro ha sollevato un’eccezione.
Questi sono i valori dell’enumerazione PromiseStatus.
Leggere .status non aspetta: ti dice dove si trova la
promise proprio ora, quindi puoi controllarla prima che si
concluda e di nuovo dopo:
my $p = start { sleep 1; 10 };
say $p.status; # Planned — read at once, while the block is still running
await $p; # now wait for it to finish
say $p.status; # Kept
say $p.result; # 10.result dà il valore mantenuto. A differenza di
.status, aspetta finché la promise non si è
conclusa, quindi su una promise non finita blocca esattamente come
await. E se la promise è stata rotta, .result
rilancia l’eccezione.
Quando vuoi guardare un fallimento senza rilanciarlo, usa
.cause — l’oggetto eccezione di una promise rotta:
my $p = start { die 'boom' };
try await $p; # let it settle (and swallow the re-thrown error)
say $p.status; # Broken
say $p.cause.message; # boomQuindi .status e .cause ispezionano una
promise senza disturbarla, mentre await e
.result ne raccolgono l’esito: il valore, oppure l’errore
rilanciato.
Navigazione del corso
← Una promise tutta vostra 🆕 | Vow 🆕 →
💪 Oppure vai direttamente agli esercizi di questa
sezione.