如何正确使用 while 循环

53 阅读1分钟
场景

有一个耗时较长但仍需同步处理的任务,使用 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 的值,一旦符合条件,跳出循环。