Как ждать, пока переменная вернется до запуска следующей функции - PullRequest
1 голос
/ 04 августа 2010

У меня есть простая функция1, которая отправляет http-запрос в API Google и возвращает результат $. Затем у меня есть другая функция2, которая, если $ result isset, должна использовать $ result для выполнения некоторых вычислений, а затем вернуть $ finalresult. .

Моя проблема в том, что вызов API Google занимает пару секунд, и к тому времени, когда function1 вернет $ result, function2 уже вернула $ finalresult без учета результата $.

Что я хочу сделать, так это полностью запустить функцию 1 и вернуть $ result до того, как функция 2 даже начнется.

Предпочтительно, я ищу решение, которое не просто использует «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
  }
}

Ответы [ 4 ]

6 голосов
/ 05 августа 2010

PHP не асинхронный. Функции выполняются одна за другой.

1 голос
/ 05 августа 2010

PHP не является многопоточным, поэтому, если вы вызываете function1_geocode до function2_proximitysearch, всегда должно быть установлено $result.

1 голос
/ 05 августа 2010

почему у вас нет функции 1, вызывающей функцию 2, когда это сделано?

Кроме того, Mchl прав.Функция 1 должна завершиться, прежде чем код выполнит функцию 2. Возможно, вам следует настроить свой код следующим образом:

$foo = 0;

$foo = function1();

if($foo > 0)
    function2();

function1()
{
    if($something)
        $foo = 1;
}

function2()
{
    $something = $else;
}

Таким образом, функция 2 будет вызываться только в том случае, если функция 1 изменила значение $ foo.

Вы можете опубликовать свой полный код, и мы узнаем, что вы пытаетесь сделать.

0 голосов
/ 05 августа 2010

Возможно, что в function1_geocode ($ address) есть ошибка, или же вам может не хватить какой-то документации по использованию этой функции.

Можно имитировать асинхронную функциональность, например, сохраняя результаты в файле, который будет обрабатываться при загрузке второй страницы. Но это должно быть специально разработано таким образом. При загрузке одной страницы PHP не может быть запущен процесс в фоновом режиме.

...