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]

Приклади

Приклад #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.

Дивіться також