Javascriptの「待機」関数を作成します。何を編集する必要がありますか?
function wait(waitsecs){
setTimeout(donothing(), 'waitsecs');
}
function donothing() {
}
編集(2019)
この質問は明らかにかなり人気がありました。
6.5年、極端な量のJSエクスペリエンスと4つのECMAバージョンが後になって、私は現在、私とおそらくこの質問に出くわしたほとんどの人が達成したかったものに対する最も美しい解決策だと思います:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
console.log('This is a message')
await sleep(5000)
console.log('This is a message 5 seconds into the future')
これはどこでも使うべきものではありません。しかし、それは私が当時探していたものを正確に実行し、それを豪華に実行します。トリックがあり、もちろんsetTimeout
がありましたが、この質問をしたとき、私が望んでいた方法を達成することは不可能でした。
Javascriptはスレッド化されていないため、「待機」によりページ全体がフリーズします(おそらく、ブラウザーでスクリプトの実行が完全に停止する可能性があります)。
問題に具体的に対処するには、donothing
呼び出しでsetTimeout
の後の括弧を削除し、waitsecs
を文字列ではなく数字にする必要があります。
console.log('before');
setTimeout(donothing,500); // run donothing after 0.5 seconds
console.log('after');
しかし、それでも実行は停止しません。関数の実行前に「後」が記録されます。
適切に待機するには、匿名関数を使用できます。
console.log('before');
setTimeout(function(){
console.log('after');
},500);
すべての変数は、「後」セクションに残ります。これらを連鎖させるべきではありません。必要な場合は、プログラムをどのように構築しているかを調べる必要があります。また、ループする必要がある場合は、setInterval
/clearInterval
を使用することもできます。
編集しないでください。完全に廃棄する必要があります。
一定時間実行を停止しようとすると、ブラウザーがロックされ、ブラウザーが応答なし状態に切り替わります。できることは、setTimeout
を正しく使用することだけです。