on_click
@on_click

Bus::batch как дождаться выполнения асинхронной задачи до перехода к следующей?

Приветствую!

Есть цепочка задач которая:
1) отправляет запрос на создание загрузки
2) проверяет статус этой загрузки
3) если загрузка завершена, отправляет запрос на кодирование
4) если кодирование завершено, обновляет запись в бд

Проблема в том, что 2 задача завершается сразу, то есть файл еще не догружен, а уже срабатывает 3я
В обычных джобах если вызвать любой Exception, задача пробует выполниться еще раз и следующая в цепочке не срабатывает, в bus::batch почему то так не работает

Подскажите пожалуйста, как мне дождаться выполнения второй асинхронной задачи, перед стартом третьей?

$batch = Bus::batch([])->dispatch();

foreach ($video_files as $video_file) {
    $file_chain = [
        new FileDownloadTask($video_file->id),
        new FileDownloadStatus($video_file->id),
        new TranscoderTask($video_file->id),
        new TranscoderStatus($video_file->id),
    ];

    $batch->add($file_chain);
}


class FileDownloadStatus implements ShouldQueue
{
    use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $backoff = 10;

    public function handle() {
        ...
        if ($response->status == "completed") {
            ...
        } else {
            throw new \Exception('Download not ready');
        }
    }

    public function retryUntil()
    {
        return now()->addHours(5);
    }
}
  • Вопрос задан
  • 347 просмотров
Решения вопроса 1
JhaoDa
@JhaoDa
LaravelRUS Team
Добавляй задания в батч в процессе: из первой запускай вторую, из второй — третью, и т.д.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы