Ich habe schon eine Weile damit zu kämpfen. Ich bin neu in Javascript und habe den Eindruck, dass der Code, den ich geschrieben habe, asynchron ausgeführt wurde. Hier ist ein generisches Beispiel:JavaScript scheint nicht auf Rückgabewerte zu warten
Ich führe einen Code in der Funktion a. Funktion A ruft dann Funktion B auf, die eine Variable an A zurückgeben muss, damit A sie in späteren Operationen verwenden kann. Es scheint jedoch, dass, wenn A B anruft, es immer noch seinen eigenen Code ausführt, nicht wartet, blockiert für seinen Rückgabewert, und B ist nicht schnell genug, so dass A den Punkt erreicht, an dem es die Rückgabe benötigt hätte Wert und ich bekomme einen undefinierten Variablentyp Fehler.
Die Weise, die ich um dieses gearbeitet habe, habe Funktion A Anruf Funktion B, die dann eine Funktion C aufruft, die tun würde, was die späteren Operationen, die A mit dem Rückgabewert tun würde .... Ich bin Art der Serialisierung obwohl statt kehrt Anrufe meinen Code durch ... das ist umständlich ...
Hier ist ein Beispiel, wenn es passiert in eigentlichen Code:
function initialize() {
//Geocode Address to obtin Lat and Long coordinates for the starting point of our map
geocoder = new google.maps.Geocoder();
var results = geocode(geocoder);
makeMap(results[0].geometry.location.lat(), results[0].geometry.location.lng());
}
function geocode(geocoder) {
//do geocoding here...
var address = "3630 University Street, Montreal, QC, Canada";
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
return results;
}
else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
function makeMap(lat, long) {
// alert(lat); for debuging
var mapOptions = {
center: new google.maps.LatLng(lat, long),
zoom: 17,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);
}
Hinweis: initialize von Körper onload aufgerufen wird = "initialisiere()" in meinem HTML.
Also das Problem ist, dass die makeMap die Längen-und Breitengrad Werte von der Geocode-Funktion erhalten, aber ich bekomme einen Fehler in der Konsole sagt Ergebnisse ist undefiniert. Was ist los? Ich kam aus Java, daher bin ich etwas verwirrt darüber, wie der Datenfluss hier in JS abläuft! Dies wird wertvolle Lehren für die Zukunft sein!
Auf einer Seite Frage: Wie soll ich meine Funktionen über externe Skripte teilen? Was wird als gute Praxis angesehen? sollten alle meine Funktionen in eine externe .js-Datei gepackt werden oder sollte ich ähnliche Funktionen gruppieren?
In Ordnung, danke, ich bin neu hier! –