2013-05-18 12 views
43

実行を2秒間停止したいですか?だから、これはあるが、今のコードブロック、次のとおりです。 HW 10.12 2秒間javascriptコードの実行を一時停止する方法

for (var i = 1; i <=5; i++) 
{ 
document.write(i); 
sleep(2);//for the first time loop is excute and sleep for 2 seconds   
}; 

</script> 
</head> 
<body> 
</body> 
</html> 

初めてループの場合を2秒間excuteと睡眠れます。私は2秒間の実行を停止したいですか?

+0

について(VARをI = 1; iが5 = <;私は++) { \t \t \tのdocument.write(i)を、 \t \t sleep(4); \t \t \t \t \t } –

+0

は、なぜあなたは2の実行を一時停止する、または、任意の秒数のですか? –

+1

質問を編集してソースコードを修正することができます。 – knuton

答えて

14

あなたはこの

function myFunction() 
    { 
    // your code 

    // stop for sometime if needed 
    setTimeout(myFunction, 5000); 
    } 
39

を行うためにsetTimeoutを使用することができます実行を一時停止するには、no(安全な)方法はありません。ただし、setTimeoutを使用して、このような何かを行うことができます。

function writeNext(i) 
{ 
    document.write(i); 

    if(i == 5) 
     return; 

    setTimeout(function() 
    { 
     writeNext(i + 1); 

    }, 2000); 
} 

writeNext(1); 
+13

なぜdownvoteですか? –

+4

なぜdocument.write()はDOMを台無しにするのですか? –

+33

@ManuViswamそれは私のdocument.writeではない、それは質問のコードです。 –

2

This Linkはあなたのための役に立つかもしれません。

私は関数の途中で眠りを欲しがるたびに、私はsetTimeout()を使うようにリファクタリングしました。

2

手続き型言語の場合と同じように、コードの実行を停止する方法はありません。あなたは代わりのsetTimeoutを使用すると、パラメータ化タイムアウトを取得するためのいくつかの策略を作ることができ :ここ

for (var i = 1; i <= 5; i++) { 
    var tick = function(i) { 
     return function() { 
      console.log(i); 
     } 
    }; 
    setTimeout(tick(i), 500 * i); 
} 

デモ:http://jsfiddle.net/hW7Ch/

84

眠っているので、スリープ機能があってはならない性質上のでJavascriptが、シングルスレッドでありますスレッドをブロックします。 setTimeoutは、スレッドをブロックせずに後で実行されるイベントをキューにポストすることでこの問題を回避する方法です。あなたは真のスリープ機能をしたい場合しかし、あなたはこのような何か書くことができます。

function sleep(miliseconds) { 
    var currentTime = new Date().getTime(); 

    while (currentTime + miliseconds >= new Date().getTime()) { 
    } 
} 
+2

** DONT LIKE THAT !!! **これは、 'while'コマンドがCPUによって無制限に実行されてフリーズしているため、その時間中に全タブフリーズ(他のタブも同様に影響を受けます)を引き起こします。実用的な例を見てください - https://jsfiddle.net/mn6yagqx/(あなた自身をテストしてください) –

+0

@ T.Todua:その理由は投稿がそれを推奨しなかった理由です。とにかくこれをやりたいと思っている場合の回避策です –

関連する問題