web-dev-qa-db-ja.com

JavaScriptのスリープ/続行する前に待つ

私はsleep/wait関数を追加する必要があるJavaScriptコードを持っています。私が実行しているコードはすでに関数の中にあります。例えば:

function myFunction(time)
{
    alert('time starts now');
    //code to make the program wait before continuing
    alert('time is up')
}

私は可能な解決策が含まれるかもしれないと聞いた

setTimeout

しかし、私はこの場合それを使用する方法がわからない。

私のサーバーはそれをサポートしていないので、私はPHPを使用することはできません、jQueryを使用することは問題ないでしょうが。

255
user2370460

JSにはスリープ関数はなく、 setTimeout() または setInterval() 関数があります。

一時停止後に実行する必要があるコードをsetTimeout()コールバックに移動できる場合は、次のようにすることができます。

//code before the pause
setTimeout(function(){
    //do what you need here
}, 2000);

ここに例があります: http://jsfiddle.net/9LZQp/

これによってスクリプトの実行が停止することはありませんが、setTimeout()が非同期関数である限り、このコードは

console.log("HELLO");
setTimeout(function(){
    console.log("THIS IS");
}, 2000);
console.log("DOG");

これをコンソールに表示します。

HELLO
DOG
THIS IS

_ dog _ THIS IS の前に表示されることに注意してください。)


次のコードを使用すると、短時間の睡眠をシミュレートできます。

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

今、あなたが1秒間眠りたいのならば、単に使用してください:

sleep(1000);

例: http://jsfiddle.net/HrJku/1/ /

このコードはnミリ秒の間スクリプトをビジー状態にします。これはあなたのページのJavascriptの実行を止めるだけでなく、ブラウザの実装によっては、ページを完全に無反応にし、ブラウザ全体を無反応にするかもしれません 言い換えれば、これはほとんど常に間違ったことです。

483
BeNdErR