2015-05-28 4 views
0

У меня есть очереди, как следующее laravel,Выполнить задание после завершения очереди в Laravel

Mail::queue($notificationCreated->template, $data, function ($message) use ($data) { 
$message->to($data['email'], $data['first_name'])->subject($data['subject']); 
}); 

Можно ли выполнить задачу после очереди завершает его выполнение, то есть в моем случае после отправки письма.

+0

Почему вы не отправляете электронную почту непосредственно в конце вашего слушателя очереди? –

+0

Электронная почта отправляется в очередь, я хочу выполнить задачу после завершения выполнения очереди. –

ответ

0

Что-то вроде этого нет в API, потому что это не точка Queue.

Это асинхронный поэтому после вызова Mail::queue вы сразу получаете контроль и выполнение кода продолжается. Это не означает, что фактическая работа была выполнена, только что она была запланирована. И нет никакого способа написать Mail::whenJobIsComplete, потому что это означало бы, что полное выполнение вашего кода должно было бы остановиться и дождаться завершения задания. Там никоим образом это не могло бы работать асинхронно.

Вы можете, однако, периодически опрос для выполненных работ и выполнения кода, когда это произойдет. Есть функция build-in для опроса неудачных заданий в API.

Но лучший подход был бы написать свой собственный queue listener, и добавление функциональности помимо handleWorkerOutputcall. Опять же, это асинхронно, этот код будет работать в какой-то неопределенной точке в будущем, даже не близко к месту, где вы изначально называли Mail::queue.

Смежные вопросы