我正在对Alexa API进行查询,由于某种未知原因,它偶尔会失败。当它失败时,我想自动重试查询,最多10次。
当它失败时,API返回的响应包含子串AuthFailure
。
我可以执行哪种循环重试查询,直到返回的响应不包含子字符串AuthFailure
或尝试了10次重试?
答案 0 :(得分:4)
您可以使用for
循环执行此操作。
for($i=0; $i < 10; $i++) {
$return = (Alexa call here)
if(!strstr($return,"AuthFailure"))
break;
}
将10调整为您想要的任何数字。更好的是,在其他地方使用常量define()
。这将一直运行,直到尝试次数耗尽或返回值不包含“AuthFailure”。
答案 1 :(得分:2)
我会做这样的事情:
define('ALEXA_FAILED', 'AuthFailure');
$response = ALEXA_FAILED;
$tries = 0;
while ($tries <= 10 && stripos($response, ALEXA_FAILED) !== FALSE)
{
$response = GetAlexaResponse();
$tries++;
}
答案 2 :(得分:0)
就个人而言,我会将调用包装在一个函数中,例如:
public function getAlexaResponse($aParam)
{
//code that does the call
return $response;
}
我会使用额外的参数扩展该函数并以递归方式调用它:
public function getAlexaResponse($aParam, $attempts = 10)
{
//code that does the call
if(!strstr($response,"AuthFailure") && ($attempt > 0)){
$this->getAlexaResponse($aParam, --$attempts);
}
return $response;
}