В моем проекте мне нужно выполнить массовый импорт и вставку данных в базу данных.
Итак, мне нужно было знать, что при сбое запроса API.Здесь проблема в том, что PHP не может перехватить это исключение, потому что Laravel 5.6 остановит выполнение, когда есть какая-либо ошибка.
Мне нужно было остановить laravel от автоматической остановки выполнения и позволить php решить, что еслиНе удалось выполнить запрос API, затем подождите 5 секунд и повторите попытку.
Чтобы добиться этого, я создал функцию внутри контроллера laravel.
private function fetchAPI($id) {
try {
$rawResult = file_get_contents('http://example.com/'.$id.'?key=5453');
} catch (Exception $e) {
sleep(5);
$this->fetchAPI($id);
}
return json_decode($rawResult, true);
}
Приведенный выше метод будет использовать попытку ...поймать блок.Но я также реализовал с булевой проверкой, не повезло:
private function fetchAPI($id) {
$rawResult = file_get_contents('http://example.com/'.$id.'?key=5453');
if($rawResult === FALSE) {
sleep(5);
$this->fetchAPI($id);
} else {
return json_decode($rawResult, true);
}
}
В этом сценарии, как я могу повторить попытку, если запрос API не прошел из метода контроллера Laravel?