2010-12-02 9 views
1

Ich habe ein Skript, das ich aus der Javascript-Ausführungswarteschlange stoßen muss. Ich habe festgestellt, dass ich das mit ein paar Methoden machen kann.Javascript asynchrone Ausführungswarteschlange und setTimeout?

alert();//of course we can't use this one. 

setTimeout(function(){ 
    someScript();//works, but are there vulnerabilites? 
}, 1); 

Welche anderen Methoden gibt es und was ist der richtige Weg, um aus der JavaScript-Ausführungswarteschlange zu kommen?

Wenn setTimeout die beste Option ist, welche Schwachstellen gibt es mit setTimeout? Gibt es mögliche zukünftige Probleme, die Möglichkeit, dass der Code im Timeout nicht aufgerufen wird, Geschwindigkeitsprobleme usw.

+0

nicht sicher, was Sie mit bump out bedeuten. In deinem Kommentar, wo du sagst "jQuery hier verwenden", ist das nicht jQuery. Das ist nur normales JavaScript, keine jquery benötigt. – Matt

+0

Wenn Sie "Schwachstellen" sagen, fragen Sie nach Dingen, auf die Sie achten sollten? (variabler Bereich, Kontext, etc) – zzzzBov

+0

@Matt, der Browser in der Warteschlange Javascript Aufrufe. Wenn ich rauskomme, meine ich, geh aus dieser Schlange und requeue. Der Kommentar bezieht sich auf die Funktion, die ich anrufe. Habe vergessen, es für dieses Beispiel zu entfernen. – UpHelix

Antwort

3

setTimeout ist die typische Art der Unterbrechung des Ausführungsflusses. alert() ist nicht das Gleiche, es ist synchron - es stoppt Ihren Code, bis OK gedrückt wird, und setzt dort fort, wo er aufgehört hat. Wenn Sie setTimeout verwenden, wird der Thread freigegeben, um einen anderen Codeabschnitt auszuführen.

Die einzigen Sicherheitslücken sind nicht zu wissen, was Sie tun. Das Kodieren von Async ist etwas komplizierter als das Kodieren von Sync. Und Sie müssen Ihren Kontext sehen, weil die Verwendung von "this" nicht funktioniert:

object = { 
    firstMethod: function(){ 
     setTimeout(function(){ 
      this.secondMethod(); // won't work! 
     }, 30); 
    }, 
    secondMethod: function(){} 
} 
+1

Ihre Antwort könnte so interpretiert werden, dass es keine Möglichkeit gibt, 'secondMethod' aus dem Kontext der Timeout-Funktion auszuführen. Ich empfehle zu aktualisieren, um zu reflektieren, dass es noch möglich ist. – alex

1

Im Grunde sprechen Sie über die Ausführung außerhalb des aktuellen Stacks, mit anderen Worten asynchron. setTimeout() ist der Weg in diesem Fall und der Code nach setTimeout() wird vor der Callback-Funktion ausgeführt.

1ms in setTimeout() funktioniert nie aber tatsächlich 1ms. Das schnellste, was du normalerweise bekommst, ist meiner Erfahrung nach 10ms.

1

setTimeout ist der Weg, es zu tun. Beachten Sie, dass der zweite Parameter Timeout ist in Millisekunden nicht Sekunden