Future::catch
(PHP 8.6+, True Async 1.0)
public function catch(callable $catch): Future
Регистрирует обработчик ошибки для Future. Callback вызывается, если Future завершился с исключением. Если callback возвращает значение, оно становится результатом нового Future. Если callback выбрасывает исключение, новый Future завершается с этой ошибкой.
Параметры
catch — функция обработки ошибки. Принимает Throwable, может возвращать значение для восстановления. Сигнатура: function(\Throwable $e): mixed.
Возвращаемое значение
Future — новый Future с результатом обработки ошибки или с исходным значением, если ошибки не было.
Примеры
Пример #1 Обработка ошибки с восстановлением
<?php
use Async\Future;
$future = Future::failed(new \RuntimeException("Сервис недоступен"))
->catch(function(\Throwable $e) {
echo "Ошибка: " . $e->getMessage() . "\n";
return "значение по умолчанию"; // Восстановление
});
$result = $future->await();
echo $result; // значение по умолчанию
Пример #2 Перехват ошибок при асинхронной операции
<?php
use Async\Future;
$future = \Async\async(function() {
$response = httpGet('https://api.example.com/users');
if ($response->status !== 200) {
throw new \RuntimeException("HTTP ошибка: {$response->status}");
}
return json_decode($response->body, true);
})
->catch(function(\Throwable $e) {
// Логируем ошибку и возвращаем пустой массив
error_log("API ошибка: " . $e->getMessage());
return [];
})
->map(function(array $users) {
return count($users);
});
$count = $future->await();
echo "Найдено пользователей: $count\n";
См. также
- Future::map — Трансформация результата Future
- Future::finally — Callback при завершении Future
- Future::ignore — Игнорировать необработанные ошибки