【发布时间】:2018-10-22 14:13:38
【问题描述】:
在我的项目中,我需要在数据库中进行批量导入和数据插入。
所以,我需要知道 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);
}
上述方法将利用 try...catch 块。但我也实施了布尔检查,但没有运气:
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);
}
}
在这种情况下,如果 Laravel 控制器方法的 API 请求失败,我该如何重试?
【问题讨论】:
-
首先使用
\Exception而不是Exception,因为Exception被认为是YourCurrentFileNamesapce\Exception -
其次,在其他类型中会抛出一些异常(对于致命错误等),您可以在第一个之后添加第二个
catch:catch(\Throwable $e) { ... } -
@PierreEmmanuelLallemant 似乎有效!
-
@PierreEmmanuelLallemant 将其发布为答案,我会将其标记为有效!