JavaScriptのJavaのThread.sleep()
と同等のものは何ですか?
簡単な答えは、そのような機能はないということです。
最も近いものは次のとおりです。
var millisecondsToWait = 500;
setTimeout(function() {
// Whatever you want to do after the wait
}, millisecondsToWait);
あなたは特にビジーウェイトを望まないことに注意してください(例えば、スピンループで)、あなたのブラウザはほぼ確実にJavaScriptを単一で実行しているからです-スレッド環境。
JavaScriptのスレッドを処理するその他のSO質問がいくつかあります。
そして、この質問も役立つかもしれません:
このコードで試してください。あなたの役に立つことを願っています。
function sleep(seconds)
{
var e = new Date().getTime() + (seconds * 1000);
while (new Date().getTime() <= e) {}
}
ECMAScript 2017を使用できると仮定すると、async/awaitおよびsetTimeoutを使用して同様の動作をエミュレートできます。次にスリープ関数の例を示します。
async function sleep(msec) {
return new Promise(resolve => setTimeout(resolve, msec));
}
その後、次のような他の非同期関数でsleep関数を使用できます。
async function testSleep() {
console.log("Waiting for 1 second...");
await sleep(1000);
console.log("Waiting done."); // Called 1 second after the first console.log
}
コールバックが不要になるため、これは素晴らしいことです。欠点は、非同期関数でのみ使用できることです。舞台裏ではtestSleep関数が一時停止され、スリープが完了すると再開されます。
MDNから:
Await式は、Promiseが履行または拒否されるまで非同期関数の実行を一時停止し、履行後に非同期関数の実行を再開します。
詳細な説明については、以下を参照してください。
ウェブページを一時停止するので、直接同等のものはありません。ただし、 setTimeout() があります。例:
function doSomething() {
thing = thing + 1;
setTimeout(doSomething, 500);
}
閉鎖の例(ダニエルに感謝):
function doSomething(val) {
thing = thing + 1;
setTimeout(function() { doSomething(val) }, 500);
}
2番目の引数は起動前のミリ秒です。これをタイムイベントに使用したり、操作を実行する前に待機したりできます。
編集:より明確な結果を得るために、コメントに基づいて更新されました。
スピンループ(関数を遅延させるために何らかの計算を実行するだけで長時間ループするループ)を記述するか、以下を使用できます。
setTimeout("Func1()", 3000);
これは3秒後に「Func1()」を呼び出します。
編集:
クレジットはコメンターに与えられますが、匿名関数をsetTimeoutに渡すことができます。
setTimeout(function() {
//Do some stuff here
}, 3000);
これははるかに効率的であり、javascriptのeval関数を呼び出しません。
最適なソリューションを得るには、ECMAスクリプト2017にasync/awaitステートメントを使用してください
awaitは非同期関数の内部でのみ使用できます
function sleep(time) {
return new Promise((resolve) => {
setTimeout(resolve, time || 1000);
});
}
await sleep(10000); //this method wait for 10 sec.
注:非同期/待機は、Thread.sleepのような実際に停止したスレッドではなく、シミュレートします
thread.sleepが行うsetTimeoutは、独自のスレッドで保持および再開しません。 Javascriptには実際に同等のものはありません
または、指定したミリ秒数後にsetInterval関数を使用して特定の関数を呼び出すこともできます。 setIntervalプロトタイプに対してgoogleを実行するだけで、まったく思い出せません。