Craziest JavaScript-Verhalten, das ich je gesehen habe

8

Und das sagt etwas. Dies basiert auf dem Google Maps-Beispiel für Wegbeschreibungen in der Google Maps API Version 3.

%Vor%

Siehst du das "alert ('booga booga')" da drin?

Damit funktioniert das alles fantastisch. Kommentar, dass out, und Var Start ist undefiniert, wenn wir auf die Zeile treffen, um var Anfrage zu definieren.

Ich entdeckte dies, als ich den Alarm löschte, den ich dort hingelegt hatte, um mir den Wert von var start zu zeigen, und es hörte auf zu arbeiten. Wenn ich es tue, um mir den Wert von var start mitzuteilen, sagt es mir, dass es nicht definiert ist, aber es hat einen gültigen (und genauen!) Wert, wenn wir var Anfrage ein paar Zeilen später definieren.

Ich vermute, dass es ein Timing-Problem ist - so wie ein asynchrones Ereignis im Hintergrund Zeit hat, in dem Moment, in dem ich den Alarm abbringe. Irgendwelche Gedanken zu Work-Arounds?

    
Dan Ray 11.05.2010, 15:09
quelle

2 Antworten

16

Was Sie annehmen, ist korrekt navigator.geolocation.getCurrentPosition() ist ein asynchroner Aufruf, der beendet wurde, während Sie diese Warnung verwerfen. Um dies zu beheben, müssen Sie Ihre Arbeit entweder von oder in der Callback-Funktion fortsetzen. Um dies zu tun, ordnen Sie den Code so an, dass er nach Abschluss des Vorgangs auftritt:

%Vor%     
Nick Craver 11.05.2010, 15:13
quelle
7

Das "asynchrone Etwas" ist der Aufruf von getCurrentPosition. Die Warnung benötigt einige Zeit, damit der Aufruf den Rückruf ausführen und aufrufen kann, der den Wert von "Start" festlegt.

Sie könnten versuchen, das gesamte Code-Bündel von "request" in den Callback von "getCurrentPosition" zu verschieben. Das würde es verzögern, bis "start" definitiv auf einen brauchbaren Wert gesetzt ist.

edit Ja, wie Nick in seinem Beispiel zeigt.

    
Pointy 11.05.2010 15:13
quelle

Tags und Links