Мне нужно чтобы как только первый ответил, отдать ответ пользователю, то есть сделать return.
После этого (как я понимаю) остальные запросы умрут. В случае Guzzle как только вернули данные, остальные promise прекращают работать
Если надо собирать данные с нескольких источников и показывать пользователю по мере появления данных, то тут алгоритм мне видится таким:
- аяксом посылаем запрос на получение данных
- сервер заводит в БД/редисе/итп место для сбора данных, стартует скрипт сбора данных (например, в очередь кладётся таска с мультикурлом. или несколько таск, каждая со свом урлом) и возвращает токен. скрипт заполняет БД данными и в конце кладёт метку, что всё скачалось
- фронт или открывает вебсокет-соединение или периодически пингует аяксом сервер на получение данных по токену и показывает их пользователю.