2017-09-08 13 views
0

再生時間と作業時間を切り替えるカウントダウンを作成しようとしています。それは我々が間隔をクリアすると「遊び」にそれを設定して、もう一度関数を呼び出す0秒に達した場合、その後...clearInterval()は再帰関数付きのif/else文では機能しません

var model = { 
intervalID: 0, 
status: 'work', 
workSeconds: 10, 
playSeconds: 10, 
} 

function startCountdown(){ 
if (model.status === 'work') { 

    model.countdown = model.workSeconds; 
    model.intervalID = setInterval(function(){ 

     model.countdown--; 
     if (model.countdown > 0) { 
      console.log('work', model.countdown); 
     } else { 
      model.status = 'play'; 
      clearInterval(model.indervalId); 
      startCountdown(); 
     } 
    }, 1000); 
} else if (model.status === 'play') { 

    model.countdown = model.playSeconds; 
    model.intervalID = setInterval(function(){ 
     model.countdown--; 
     if (model.countdown > 0) { 
      console.log('play', model.countdown); 
     } else { 
      model.status = 'work'; 
      clearInterval(model.indervalId); 
      startCountdown(); 
     } 
    }, 1000); 
} 
} 
startCountdown(); 

この機能は、10秒のカウントダウンを記録慰めることになっている仕事の10秒で始まります仕事のために、カウントダウンが0に達すると、プレイの10秒カウントダウンに切り替わり、それを続けます。

現在のところ、間隔がクリアされておらず、両方の間隔がちょうどフィードバックループ内で互いに設定されているように見えます。

なぜ間隔がクリアされないのですか?

答えて

2

あなたはタイプミスがあると思います。 clearInterval(model.indervalId);clearInterval(model.intervalID);である必要があります。

私はこれでもsetTimeoutを使用したいと思いますが、あなたはすでにそれについて知っていると思います。

+0

オスカーについては申し訳ありませんが、私の見解はどうなっていますか?私はsetTimeoutについて考えなかった。私は一見するだろう。ありがとうございました! –

関連する問題