我有一个简单的function1,它向google api发出http请求并返回$ result。 然后我有另一个函数2,如果$ result isset,应该使用$ result进行一些计算,然后返回$ finalresult。
我的问题是,对google api的调用需要几秒钟,而当function1返回$ result时,function2已经返回$ finalresult而不考虑$ result。
我要做的是让function1完全运行并在function2开始之前返回$ result。
我正在寻找一种不仅仅使用“sleep()”的解决方案,因为此函数不能保证$ result实际返回。 (除非有某种方法可以循环睡眠(1)直到$ return isset,或类似的东西)
视觉家伙和家伙的示例代码
function1_geocode($address); // this function makes a http request to google and returns $result
function2_proximitysearch(){
if (isset($result)){
//inevitably by the time the script gets there, $result hasn't been returned yet therefore none of the "some stuff" code is executed.
//some stuff
}
else {
//some other stuff
}
}
答案 0 :(得分:6)
PHP不是异步的。功能一个接一个地执行。
答案 1 :(得分:1)
为什么在完成后你没有函数1调用函数2?
另外,Mchl是对的。函数1必须在代码执行函数2之前完成。也许您应该像这样设置代码:$foo = 0;
$foo = function1();
if($foo > 0)
function2();
function1()
{
if($something)
$foo = 1;
}
function2()
{
$something = $else;
}
这样,如果函数1改变了$ foo的值,它只会调用函数2。
您可以发布完整的代码,我们会知道您要做的是什么。
答案 2 :(得分:1)
PHP没有线程化,因此如果您在function1_geocode
之前致电function2_proximitysearch
,则应始终设置$result
。
答案 3 :(得分:0)
可能是function1_geocode($ address)有错误,否则你可能会遗漏一些关于如何使用该函数的文档。
有可能通过例如将结果保存到要由第二页加载处理的文件来模拟异步功能。但那必须以这种方式专门设计。在一个PHP页面加载中,您无法在后台运行进程。