РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1370 of 1392 menu

Функция dispatch_sync

Функция dispatch_sync выполняет задание синхронно, то есть немедленно в текущем процессе, без добавления в очередь. Это полезно для тестирования, отладки или когда требуется гарантированное выполнение задания до продолжения работы скрипта. Функция принимает экземпляр класса задания и возвращает результат его выполнения.

Синтаксис

<?php dispatch_sync($job); ?>

Пример

Давайте создадим простое задание и выполним его синхронно:

<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; class ProcessData implements ShouldQueue { protected $payload; public function __construct($payload) { $this->payload = $payload; } public function handle() { return strtoupper($this->payload); } } ?>
<?php namespace AppHttpControllers; use AppJobsProcessData; class ProcessController extends Controller { public function process() { $job = new ProcessData('abcde'); $res = dispatch_sync($job); echo $res; } } ?>

Результат выполнения кода:

"ABCDE"

Пример

Давайте выполним задание, которое сохраняет данные в базу данных, и убедимся, что запись создана немедленно:

<?php namespace AppJobs; use AppModelsArticle; use IlluminateContractsQueueShouldQueue; class SaveArticle implements ShouldQueue { protected $data; public function __construct($data) { $this->data = $data; } public function handle() { $article = Article::create([ 'title' => $this->data['title'], 'text' => $this->data['text'], ]); return $article; } } ?>
<?php namespace AppHttpControllers; use AppJobsSaveArticle; class ArticleController extends Controller { public function store() { $data = [ 'title' => 'article 1', 'text' => 'text 1', ]; $job = new SaveArticle($data); $article = dispatch_sync($job); echo $article->id; } } ?>

Результат выполнения кода:

"1"

Пример

Давайте обработаем ошибку, возникшую при синхронном выполнении задания:

<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; class ValidateData implements ShouldQueue { protected $value; public function __construct($value) { $this->value = $value; } public function handle() { if (empty($this->value)) { throw new \Exception('Value is empty'); } return true; } } ?>
<?php namespace AppHttpControllers; use AppJobsValidateData; use IlluminateSupportFacadesLog; class ValidateController extends Controller { public function validate() { try { $job = new ValidateData(''); $res = dispatch_sync($job); echo $res; } catch (\Exception $e) { Log::error($e->getMessage()); echo $e->getMessage(); } } } ?>

Результат выполнения кода:

"Value is empty"

Смотрите также

  • функция dispatch,
    которая отправляет задание в очередь для асинхронного выполнения
  • метод delay,
    который устанавливает задержку перед выполнением задания
  • метод onQueue,
    который указывает очередь для выполнения задания
  • метод handle,
    который содержит логику выполнения задания
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить