2017-06-26 5 views
-1

Ich arbeite derzeit mit dem Google Maps API. Ich benutze die globalFunction, wenn der Benutzer auf eine Schaltfläche klickt. Die "calcRoad" -Funktion generiert die Straße mithilfe der Google Maps-API, und "Myfunction" verwendet die Daten von "calcRoad", um Berechnungen durchzuführen.Google Maps API asynchron

Mein Problem ist, dass jetzt "MyFunction" nicht warten "CalcRoad" zu beenden, bevor Sie starten. Ich nehme an, dass einige der Google API-Anfragen asynchron sind, ich aber nicht auf den Code dahinter zugreifen kann.

Wie konnte ich "Myfunction" zwingen zu warten, bis "calcRoad" fertig ist?

function globalFunction(){ 
    calcRoad(true,latitude, longitude); 
    Myfunction(); 
} 

function calcRoad(bool,lat,long) { 
    marker.setVisible(false); 
    var date = new Date(); 
    // Add a waypoint 
    if(bool){ 
     var tampon = new google.maps.LatLng(lat,long); 
     waypoints.push({ 
      location: tampon, 
      stopover:false 
     }); 
    } 

    var request = { 
     origin: departure_place.geometry.location, 
     destination: arrival_place.geometry.location, 
     travelMode: google.maps.TravelMode[mode], 
     waypoints: waypoints, 
     avoidHighways: false, 
    }; 

    directionsService.route(request, function(response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      directionsDisplay.setDirections(response); 
     } 
    }); 
} 

PS: Ich habe versucht, einige SetTimeout zu verwenden, bevor „Myfunction“ aufrufen und es funktioniert, aber ich weiß nicht, wie lange wird die „calcRoad“ (je nach Benutzerparameter) beenden nehmen kann ich benutze setTimeout nicht.

Ich hoffe, dass ich mit meinem Problem klar bin, danke im Voraus für Ihre Hilfe.

Antwort

0

Sie sollen einen Rückruf Parameter in Ihrer calcRoad Funktion hinzufügen:

function globalFunction(){ 
    calcRoad(true,latitude, longitude, Myfunction); 
} 

function calcRoad(bool,lat,long, cb) { 
    marker.setVisible(false); 
    var date = new Date(); 
    // Add a waypoint 
    if(bool){ 
     var tampon = new google.maps.LatLng(lat,long); 
     waypoints.push({ 
      location: tampon, 
      stopover:false 
     }); 
    } 

    var request = { 
     origin: departure_place.geometry.location, 
     destination: arrival_place.geometry.location, 
     travelMode: google.maps.TravelMode[mode], 
     waypoints: waypoints, 
     avoidHighways: false, 
    }; 

    directionsService.route(request, function(response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      directionsDisplay.setDirections(response); 
      cb && cb(); // Check if "cb" callback function is defined and execute it 
     } 
    }); 
} 

So etwas wie dies funktionieren soll!

+0

Ich habe versucht, eine Callback-Funktion zu verwenden, aber Myfunction wird noch ausgeführt, bevor calcRoad (und directionsService) ihre Arbeit beendet haben. – Anthony

+0

Ok, das ist seltsam! Hast du es bestanden, ohne es auszuführen? – Mteuahasan

+0

Ich meine so: 'calcRoad (true, Breitengrad, Längengrad, Myfunction);' Ein nicht wie folgt: 'CalcRoad (True, Breite, Länge, Myfunction());' – Mteuahasan