2010-08-04 4 views
1

J'ai une simple fonction1 qui fait une requête http à une API google et renvoie le résultat $. J'ai alors une autre fonction2 qui, si $ result isset, devrait utiliser $ result pour faire de l'informatique et retourner $ finalresult. .Comment attendre le retour d'une variable avant le démarrage de la fonction suivante

Mon problème est que l'appel à google api prend quelques secondes et au moment où $ result est renvoyé par function1, function2 a déjà renvoyé $ finalresult sans tenir compte de $ result. Ce que je cherche à faire est d'avoir function1 pour fonctionner complètement et renvoyer $ result avant que function2 ne commence même.

Préférablement Je recherche une solution qui n'utilise pas simplement "sleep()" car cette fonction ne garantit pas que $ result est effectivement retourné. (À moins d'une façon de boucler un sommeil (1) jusqu'à ce que isset de retour de $, ou quelque chose comme ça)

Exemple de code pour les gals visuels et les gars

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 
    } 
} 

Répondre

6

PHP n'est pas asynchrone. Les fonctions sont exécutées les unes après les autres. Pourquoi n'avez-vous pas la fonction 1 appelez la fonction 2 quand elle est terminée?

+3

parfois c'est une bénédiction, parfois c'est une malédiction ... – pxl

+2

C'est une bénédiction. Croyez-moi, vous ne voudriez pas être obligé de faire de la programmation simultanée tout le temps. – Mchl

1

En outre, Mchl a raison. fonction 1 devra remplir avant que le code exécute la fonction 2. Peut-être que vous devez configurer votre code comme ceci:

$foo = 0; 

$foo = function1(); 

if($foo > 0) 
    function2(); 

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

function2() 
{ 
    $something = $else; 
} 

De cette façon, il n'appeler la fonction 2 si la fonction 1 a changé la valeur de $ foo.

De vous pouvez poster votre code complet et nous saurons ce que vous essayez de faire.

1

PHP n'est pas enfilé, donc si vous appelez function1_geocode avant function2_proximitysearch, $result doit toujours être défini.

0

Il se peut que function1_geocode ($ address) ait un bogue, sinon il se peut que vous manquiez une documentation sur la façon dont cette fonction est utilisée.

Il est possible de simuler une fonctionnalité asynchrone, par exemple en enregistrant les résultats dans un fichier à traiter par un chargement de seconde page. Mais cela devrait être spécifiquement conçu de cette façon. Dans un chargement de page PHP, vous ne pouvez pas exécuter un processus en arrière-plan.

Questions connexes