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

Метод progress

Метод progress применяется к экземпляру класса Batch и возвращает целочисленное значение, представляющее процент выполнения пакетного задания. Метод не принимает никаких параметров и вычисляет прогресс на основе количества успешно выполненных заданий по отношению к общему количеству заданий в пакете.

Синтаксис

<?php $batch->progress(); ?>

Пример

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

<?php namespace App\Http\Controllers; use App\Jobs\ProcessDataJob; use Illuminate\Support\Facades\Bus; class BatchController extends Controller { public function index() { $jobs = [ new ProcessDataJob([1, 2, 3]), new ProcessDataJob([4, 5, 6]), new ProcessDataJob([7, 8, 9]) ]; $batch = Bus::batch($jobs)->dispatch(); $progress = $batch->progress(); echo "Progress: $progress%"; } } ?>

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

"Progress: 0%"

Пример

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

<?php namespace App\Http\Controllers; use App\Jobs\SendEmailJob; use Illuminate\Support\Facades\Bus; class BatchController extends Controller { public function show() { $batch = Bus::batch([ new SendEmailJob(1), new SendEmailJob(2), new SendEmailJob(3), new SendEmailJob(4) ])->name('send_emails')->dispatch(); $progress = $batch->progress(); if ($progress < 100) { echo "Batch is running: $progress%"; } else { echo "Batch completed"; } } } ?>

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

"Batch is running: 25%"

Пример

Давайте используем метод progress в сочетании с методами then и catch для отслеживания прогресса в реальном времени:

<?php namespace App\Http\Controllers; use App\Jobs\ProcessImageJob; use Illuminate\Support\Facades\Bus; class BatchController extends Controller { public function processImages() { $images = ['image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg']; $jobs = []; foreach ($images as $image) { $jobs[] = new ProcessImageJob($image); } $batch = Bus::batch($jobs)->then(function () use (&$batch) { echo "Batch completed with " . $batch->progress() . "% progress"; })->catch(function () use (&$batch) { echo "Batch failed. Progress: " . $batch->progress() . "%"; })->dispatch(); return $batch->id; } } ?>

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

"Batch completed with 100% progress"

Пример

Давайте создадим пакет с возможностью отмены и получим прогресс до и после отмены:

<?php namespace App\Http\Controllers; use App\Jobs\LongRunningJob; use Illuminate\Support\Facades\Bus; class BatchController extends Controller { public function cancelBatch() { $jobs = [ new LongRunningJob(1), new LongRunningJob(2), new LongRunningJob(3) ]; $batch = Bus::batch($jobs)->allowFailures()->dispatch(); $initialProgress = $batch->progress(); echo "Initial progress: $initialProgress%"; $batch->cancel(); $finalProgress = $batch->progress(); echo "After cancellation: $finalProgress%"; } } ?>

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

"Initial progress: 0%" "After cancellation: 0%"

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

  • метод then,
    который выполняет коллбэк после успешного завершения пакета
  • метод catch,
    который выполняет коллбэк при возникновении ошибки в пакете
  • метод finally,
    который выполняет коллбэк после завершения пакета в любом случае
  • метод cancel,
    который отменяет выполнение пакетного задания
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить