2017-01-06 4 views
0

こんにちは私は毎回増加する間隔で3回実行するforループを取得しようとしています。私はそれが実行されるたびにコンソールにテキストを出力するループをしたいと思いますが、私は一度にすべてを実行し、完了、完了、完了、そして2回終了したことを示すループを停止することはできません。コード:setTimeout間隔を増やすループ

function tellMeWhenDone() { 

    for(var i=0; i<3; i++) { 
      if (i === 0) 
        var text = console.log('done'); 

      else if (i === 1) 
        var text = console.log('and done'); 

      else (i === 2) 
        var text = console.log('finished'); 

      time(i); 
} 
} 

    function time (i){ 
      setInterval(function(text){ 
     return text; 
     }, 1000*(i+1)) 
} 
tellMeWhenDone(); 

ご協力いただければ幸いです!ありがとうございました。

+2

...とは何ですか? –

+1

なぜ "else(i === 2)"に条件がありますか? –

+0

私はJSに慣れていないので、それ以外の条件があります。私は、1000、2000,3000msの間隔で3つの別々のsetTimeoutステートメントを使用することで、私が探している結果を得ることに同意します。私はエクササイズとしてこの機能を構築しようとしています。そのため、私はこれを最も直接的な方法で行かないかもしれません。皆さん、お世話になりました。 – mat

答えて

1

setIntervalは、定期的なイベントを設定します。 setTimeoutは1回しか発砲しません。何のループがありません

setTimeout(function(){console.log('done')},1000); 
setTimeout(function(){console.log('and done')},2000); 
setTimeout(function(){console.log('finished')},3000); 

注意:あなたが使用することができます - 3つのタイムアウト、1、2、3秒を作成するには

。各setTimeoutが実行され、タイムアウトに達するとconsole.logステートメントが実行されます。

forループは、setInterval呼び出しの前に完全に実行されています。

0

this..Iは希望を持って、その解決あなたのprblm

function tellMeWhenDone() { 

for(var i=0; i<3; i++) { 
     if (i === 0) 
       var text = console.log('done'); 

     else if (i === 1) 
       var text = console.log('and done'); 

     else if (i === 2) 
       var text = console.log('finished'); 

     time(i); 
} 
} 

function time (i){ 
     setInterval(function(text){ 
    return text; 
    }, 1000*(i+1)) 
} 
tellMeWhenDone(); 
1

他のループ内で条件を削除してみ

function tellMeWhenDone() { 
 

 
    for (var i = 0; i < 3; i++) { 
 
    if (i === 0) 
 
     var text = console.log('done'); 
 

 
    else if (i === 1) 
 
     var text = console.log('and done'); 
 

 
    else 
 
     var text = console.log('finished'); 
 

 
    time(i); 
 
    } 
 
} 
 

 
function time(i) { 
 
    setInterval(function(text) { 
 
    return text; 
 
    }, 1000 * (i + 1)) 
 
} 
 
tellMeWhenDone();

0
あなたがコールバックを試してください

function log(msg) { 
 
    document.getElementById('logger').innerHTML += '<br/>' + msg; 
 
} 
 

 
function on_complete() { 
 
    log('all done, when = ' + Date.now()); 
 
} 
 

 
for (var i = 1, max = 5; max >= i; i++) { 
 
    (function(x) { 
 
    setTimeout(function() { 
 
     log('loop, x = ' + x + ', when = ' + Date.now()); 
 
     if (max === x) 
 
     on_complete(); 
 
    }, 1000 * x); //increasing timeout 
 
    })(i); 
 
}
<pre id='logger'>Running code...</pre>

関連する問題