Future::await
(PHP 8.6+, True Async 1.0)
php
public function await(?Completable $cancellation = null): mixedОчікує завершення Future та повертає його результат. Блокує поточну корутину до завершення Future. Якщо Future завершився з помилкою, метод викидає відповідний виняток. Можна передати Completable для скасування очікування за тайм-аутом або зовнішньою умовою.
Параметри
cancellation — об'єкт скасування очікування. Якщо передано і спрацьовує до завершення Future, буде викинуто AsyncCancellation. За замовчуванням null.
Значення, що повертається
mixed — результат Future.
Помилки
Викидає виняток, якщо Future завершився з помилкою або був скасований.
Приклади
Приклад #1 Базове очікування результату
php
<?php
use Async\Future;
use Async\FutureState;
$state = new FutureState();
$future = new Future($state);
\Async\spawn(function() use ($state) {
\Async\delay(100);
$state->complete(42);
});
$result = $future->await();
echo "Result: $result\n"; // Result: 42Приклад #2 Обробка помилок під час очікування
php
<?php
use Async\Future;
use Async\FutureState;
$state = new FutureState();
$future = new Future($state);
\Async\spawn(function() use ($state) {
$state->error(new \RuntimeException("Something went wrong"));
});
try {
$result = $future->await();
} catch (\RuntimeException $e) {
echo "Error: " . $e->getMessage() . "\n";
// Error: Something went wrong
}Дивіться також
- Future::isCompleted — Перевірити, чи завершено Future
- Future::cancel — Скасувати Future
- Future::map — Перетворити результат