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

Функция retry

Функция retry предназначена для выполнения замыкания с автоматическим повторением в случае возникновения исключений. Первым параметром передаётся максимальное количество попыток, вторым - замыкание, которое нужно выполнить, третьим - задержка в миллисекундах между попытками, четвёртым - замыкание для обработки исключений.

Синтаксис

<?php retry($attempts, $callback, $delay = 100, $when = null); ?>

Параметр $attempts задаёт количество попыток выполнения, параметр $callback - выполняемый код, $delay - задержка между попытками в миллисекундах, $when - колбэк для обработки исключений.

Пример

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

<?php namespace AppHttpControllers; use IlluminateSupportFacadesDB; class ExampleController extends Controller { public function index() { $res = retry(3, function () { return DB::table('users')->where('id', 1)->first(); }, 100); echo $res->name; } } ?>

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

"John Doe"

В данном примере запрос будет выполнен до 3 раз с задержкой 100 мс между попытками в случае возникновения исключения.

Пример

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

<?php namespace AppHttpControllers; use IlluminateSupportFacadesLog; class ExampleController extends Controller { public function index() { $res = retry(5, function () { $data = file_get_contents('https://api.example.com/data'); if ($data === false) { throw new \Exception('Failed to fetch data'); } return json_decode($data, true); }, 200, function ($exception) { Log::warning('Attempt failed: ' . $exception->getMessage()); }); echo $res['status']; } } ?>

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

"success"

Пример

Давайте используем функцию для повторной попытки отправки email уведомления при сбое:

<?php namespace AppHttpControllers; use AppMailWelcomeMail; use IlluminateSupportFacadesMail; class NotificationController extends Controller { public function sendWelcome($email) { $res = retry(3, function () use ($email) { Mail::to($email)->send(new WelcomeMail()); return "Email sent successfully"; }, 500); echo $res; } } ?>

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

"Email sent successfully"

Функция будет повторять отправку письма до 3 раз с задержкой 500 мс между попытками при возникновении ошибок.

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

  • функция rescue,
    которая перехватывает исключения и возвращает значение по умолчанию
  • функция report,
    которая отправляет исключение в лог
  • функция throw_if,
    которая выбрасывает исключение при выполнении условия
  • функция tap,
    которая выполняет колбэк с переданным значением и возвращает его
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить