场景
有一个耗时较长但仍需同步处理的任务,使用 while 循环和 sleep 函数等待任务处理完成。
错误代码
$res = $this->retrieveResult($paragram);
$i = 0;
while ($i < 10 && $res->status != 'completed'){
//处理中,等待 10s
Log::debug('in process');
sleep(10);
$i ++;
}
错误原因:变量 $res 只在进入循环前获取了 1 次,每次循环使用的值都是固定的,导致循环无效。
正确代码
$i = 0;
while ($i < 10){
$res = $this->retrieveResult($paragram);
if($res->status == 'completed'){
break;
}
//处理中,等待 10s
Log::debug('in process');
sleep(10);
$i ++;
}
每次在循环中动态获取变量 $res 的值,一旦符合条件,跳出循环。