2013-03-29 7 views
10

Ich möchte eine Javascript "Warte" -Funktion erstellen. was soll ich bearbeiten?Javascript wait() Funktion

function wait(waitsecs){ 
setTimeout(donothing(), 'waitsecs'); 
} 

function donothing() { 

} 
+0

Wahrscheinlich meintest du 'setTimeout (donothing(), waitsecs);' aber ich verstehe nicht, was das ist. 'setTimeout' blockiert nicht, und Sie sollten kein Spin-Wait erstellen. http://StackOverflow.com/Q/951021/139010 –

+0

Eine bessere Frage ist * warum * möchten Sie 'warten' Funktion haben? –

+0

Dieser Code ruft Doning * sofort * auf und übergibt eine Zeichenfolge, nicht den Wert eines Parameters. 'setTimeout (donothing, waitsecs)' wäre ein besserer Versuch, .. ein dummer Wrapper. –

Antwort

38

Javascript ist nicht Threading, so ein "warten" würde die gesamte Seite einfrieren (und wahrscheinlich dazu führen, dass der Browser nicht mehr das Skript vollständig ausgeführt wird).

Um speziell auf Ihr Problem zu lösen, sollten Sie die Klammern nach donothing in Ihrem setTimeout Aufruf, entfernen und waitsecs eine Zahl keinen String machen:

console.log('before'); 
setTimeout(donothing,500); // run donothing after 0.5 seconds 
console.log('after'); 

Aber das wird nicht die Ausführung stoppen; "after" wird protokolliert, bevor Ihre Funktion ausgeführt wird.

Um richtig zu warten, Sie anonyme Funktionen verwenden können:

console.log('before'); 
setTimeout(function(){ 
    console.log('after'); 
},500); 

alle Variablen da sein noch in der „nach“ Abschnitt. Sie sollten diese nicht verketten - wenn Sie sich dazu gezwungen sehen, müssen Sie schauen, wie Sie das Programm strukturieren. Sie können auch setInterval/clearInterval verwenden, wenn es eine Schleife benötigt.

+1

was für ein einfacher Code! :) –

4

Sie sollten es nicht bearbeiten, Sie sollten es vollständig verschrotten.

Jeder Versuch, die Ausführung für eine bestimmte Zeit zu stoppen, sperrt den Browser und schaltet ihn in den Status Nicht reagieren. Das einzige, was Sie tun können, ist setTimeout korrekt zu verwenden.

+0

+1 das ist besser zu beantworten. – Sajmon

+14

Ich denke, [Dave's Antwort] (http://stackoverflow.com/a/15694534/53926) ist besser. Weniger snark mehr echten Rat. – Xavi