jQuery に似た JavaScript メソッドはありますdelay()
かwait()
(スクリプトの実行を特定の時間遅らせるため)?
15 に答える
他のみんなが言ったことに追加するだけですsetTimeout
:将来、パラメータを使用して関数を呼び出したい場合は、匿名関数呼び出しを設定する必要があります。
後で呼び出すには、関数を引数として渡す必要があります。事実上、これは名前の後ろに角かっこがないことを意味します。以下はアラートを一度に呼び出し、「Helloworld」を表示します。
var a = "world";
setTimeout(alert("Hello " + a), 2000);
これを修正するには、関数の名前を入力するか(Flubbaが行ったように)、無名関数を使用できます。パラメータを渡す必要がある場合は、無名関数を使用する必要があります。
var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";
しかし、そのコードを実行すると、2秒後にポップアップに「HelloStackOverflow」と表示されることに気付くでしょう。これは、変数aの値がこの2秒間に変更されたためです。2秒後に「Helloworld」と表示するには、次のコードスニペットを使用する必要があります。
function callback(a){
return function(){
alert("Hello " + a);
}
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";
2秒待ってから、「Helloworld」がポップアップ表示されます。
少し拡張するだけです...setTimeout
呼び出しで直接コードを実行できますが、@ patrickが言うように、通常はこのようなコールバック関数を割り当てます。時間はミリ秒です
setTimeout(func, 4000);
function func() {
alert('Do stuff here');
}
本当にブロッキング (同期)delay
関数が必要な場合は (なんとしてでも)、次のようにしてみませんか。
<script type="text/javascript">
function delay(ms) {
var cur_d = new Date();
var cur_ticks = cur_d.getTime();
var ms_passed = 0;
while(ms_passed < ms) {
var d = new Date(); // Possible memory leak?
var ticks = d.getTime();
ms_passed = ticks - cur_ticks;
// d = null; // Prevent memory leak?
}
}
alert("2 sec delay")
delay(2000);
alert("done ... 500 ms delay")
delay(500);
alert("done");
</script>
setTimeoutを使用してコールバック関数を渡す必要があります。javascript で sleep を使用できない理由は、ページ全体がその間何もできないようにするためです。良い計画ではありません。Javascript のイベント モデルを使用して、満足してください。戦わないで!
window.setInterval()を使用して、一定の間隔でいくつかのコードを繰り返し実行することもできます。
以前のコメントに追加して、次のことを言いたいと思います。
JavaScriptのsetTimeout()
関数は、スクリプト自体の実行を一時停止するのではなく、後でコードを実行するようコンパイラに指示するだけです。
JavaScript に組み込みの実行を実際に一時停止できる関数はありません。Date()
ただし、関数を使用して必要な時間間隔を追加することにより、時間に達するまで無条件ループのようなことを行う独自の関数を作成できます。
遅延のみをテストする必要がある場合は、これを使用できます。
function delay(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
}
そして、2 秒間遅らせたい場合は、次のようにします。
delay(2000);
ただし、生産には最適ではないかもしれません。詳細はコメントで
簡単な返信は次のとおりです。
setTimeout(
function () {
x = 1;
}, 1000);
上記の関数は 1 秒 (1000 ミリ秒) 待機してから x を 1 に設定します。明らかにこれは例です。無名関数内では何でもできます。
遅延機能:
/**
* delay or pause for some time
* @param {number} t - time (ms)
* @return {Promise<*>}
*/
const delay = async t => new Promise(resolve => setTimeout(resolve, t));
async
関数内での使用法:
await delay(1000);
遅延を使用して関数を呼び出す最も簡単なソリューションは次のとおりです。
function executeWithDelay(anotherFunction) {
setTimeout(anotherFunction, delayInMilliseconds);
}