Продолжайте проверять, если оператор в Laravel - PullRequest
1 голос
/ 16 июня 2020

Как лучше всего проверять условие, пока оно не станет истинным? Я знаю, что в PHP есть оператор while, но не был уверен, есть ли лучший способ упаковки в Laravel.

В основном я перекодирую видео через AWS. Я хочу, чтобы интерфейс продолжал повторять «Загрузка», пока я не узнаю, что видео перекодировано и сохранено в AWS, а вся информация находится в базе данных. Видео будут короткими, но перекодирование не будет мгновенным, поэтому, если я сделаю:

if ($job['Status'] == 'complete') {

      $submission = new Submission();

      $submission->email = $request->input('email');
      $submission->original = config('filesystems.disks.s3.url') . $original_key;

      $submission->save();

      return response()->json([
           'submission' => $submission,
           'message' => 'Upload Successful. Good luck!!!!',
           'job' => $job
       ]);
}

Этот оператор if сразу станет ложным. Но если я буду проверять снова каждые несколько секунд, через некоторое время это пройдет. Есть ли функция импульсного типа, чтобы продолжать запускать этот оператор if каждые X времени, пока он не пройдет? Кажется, что использование времени достигает max_execution_time предела.

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Это должно быть на стороне PHP?

Если JS работает, я полагаю, что одним из способов было бы иметь состояние bool в вашем JS, чтобы отображать «Загрузка» с помощью setTimeout (), чтобы проверить, загружается ли видео каждые x секунд. Когда он пройдет, вы можете установить состояние false, что приведет к исчезновению «Загрузка».

Также не забудьте остановить функцию setTimeout, когда она пройдет.

0 голосов
/ 17 июня 2020

На мой взгляд, может быть 02 решения:

1) На вашем месте я бы предпочел обрабатывать это на стороне Frontend с помощью AJAX. Это псевдокод, объясняющий мою идею

function uploadMyVideo() { // to be called once we confirm the upload
  var jqxhr = $.ajax( "/upload/url" )
  .done(function() {
    // call another ajax to set the status = SUCCESS
  })
  .fail(function() {
    // call another ajax to set the status = FAIL
  })
  .always(function() {
    // in case you need it
  });
}

2) Вы можете использовать Laravel планировщик для периодического вызова (например: каждую минуту) задания, которое проверяет статус завершения, и запустите в нем лог c. (это работа cron с laravel way)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...