await_first_success
(PHP 8.6+, True Async 1.0)
await_first_success() — Очікує першу успішно завершену задачу. Помилки інших задач збираються окремо і не переривають очікування.
Опис
await_first_success(
iterable $triggers,
?Async\Awaitable $cancellation = null
): array
Параметри
triggers
Ітерована колекція об’єктів Async\Completable.
cancellation
Необов’язковий Awaitable для скасування очікування.
Значення, що повертаються
Масив із двох елементів: [$result, $errors]
$result— результат першої успішно завершеної задачі (абоnull, якщо всі задачі завершилися з помилкою)$errors— масив винятків від задач, що завершилися з помилкою до першого успіху
Приклади
Приклад #1 Відмовостійкий запит
<?php
use function Async\spawn;
use function Async\await_first_success;
// Спробувати кілька серверів; взяти першу успішну відповідь
[$result, $errors] = await_first_success([
spawn(file_get_contents(...), 'https://primary.example.com/api'),
spawn(file_get_contents(...), 'https://secondary.example.com/api'),
spawn(file_get_contents(...), 'https://fallback.example.com/api'),
]);
if ($result !== null) {
echo "Дані отримано\n";
} else {
echo "Усі сервери недоступні\n";
foreach ($errors as $error) {
echo " - " . $error->getMessage() . "\n";
}
}
?>
Примітки
Примітка: Параметр
triggersприймає будь-якийiterable, включаючи реалізаціїIterator. Дивіться приклад з Iterator.
Дивіться також
- await_any_or_fail() — перша задача, помилка перериває виконання
- await_all() — усі задачі з толерантністю до помилок