> Что произойдет при вызове асинхронной функции без await? (PHP)

Уровень: senior · Роль: backend · Язык: PHP · Категория: Технические вопросы

Компании: витринатв

Стек: PHP

> Пример ответа

При вызове асинхронной функции без await в PHP (начиная с версии 8.1, где появилась поддержка Fibers и асинхронности через расширения, например, ext-fiber или библиотеки вроде ReactPHP/Amp) выполнение функции начнется, но результат не будет дождан. Вместо этого будет возвращен объект Fiber или Promise (в зависимости от реализации), а управление сразу вернется к вызывающему коду. Это означает, что асинхронная операция может быть запущена, но ее завершение не будет синхронизировано с последующим кодом, что может привести к преждевременному завершению скрипта или потере результата. Например:

PHP
use function Amp\async;
$result = async(function() {
return 42;
});
// $result - это объект Promise, а не число 42
echo $result; // Ошибка или неожиданный вывод

Без await (или Fiber::suspend()/Promise::await()) вы не получите фактическое значение, а лишь дескриптор асинхронной задачи. В синхронном PHP-скрипте это может привести к тому, что асинхронная функция не выполнится вовсе, если скрипт завершится до завершения операции.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью