2013-03-29 42 views
10

javascriptの 'wait'関数を作成したいとします。 私は何を編集する必要がありますか?Javascript wait()function

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

function donothing() { 

} 
+0

あなたはたぶん 'setTimeout(donothing()、waitsecs); 'を意味していましたが、私はそれが何であるかは分かりません。 'setTimeout'はブロックされないので、スピンウェイトを作成しないでください。 http://stackoverflow.com/q/951021/139010 –

+0

より良い質問は、なぜあなたは 'wait'機能を持ちたいのですか? –

+0

このコードは、donothing * immediately *を呼び出し、パラメータの値ではなく文字列を渡します。 'setTimeout(donothing、waitsecs)'は、愚かなラッパーの方がよいでしょう。 –

答えて

38

JavaScriptはスレッド化されていないため、「待機」するとページ全体がフリーズし、ブラウザがスクリプトを完全に実行しなくなる可能性があります。特に、あなたの問題に対処するために

、あなたはあなたのsetTimeout呼び出しでdonothing後に括弧を削除し、waitsecs数ではない文字列を作成する必要があります。

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

しかし、それは実行を停止しません。 "after"は、関数が実行される前に記録されます。

適切に待つためには、無名関数を使用することができます。

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

あなたのすべての変数は、まだ「後」セクションにあるでしょう。これらを連鎖させるべきではありません。自分自身が必要になった場合は、プログラムをどのように構築しているのかを調べる必要があります。また、ループする必要がある場合は、setInterval/clearIntervalを使用することもできます。

+1

どのような簡単なコード! :) –

4

編集しないでください。完全にスクラップする必要があります。

実行を一定時間停止すると、ブラウザがロックされ、応答しない状態になります。あなたができる唯一のことは、setTimeoutを正しく使用することです。

+0

+1これは良い答えです。 – Sajmon

+14

私は[デーヴの答え](http://stackoverflow.com/a/15694534/53926)が良いと思います。より現実的なアドバイスを少なくする – Xavi