2011-07-18 11 views
2

setTimeout関数を別のタイムアウトに設定する方法があるかどうかは疑問でした。即座にsetTimeoutを再設定する方法

そうで、例えば私は1秒ごとに何かをチェックし、私は10秒などに期待される結果を得ることはありません場合、私は、このsetTimeoutを「再構成」するためにここに代わり1

の3秒を待ちたいです私のコードは次のとおりです。

var br = 0; 
var waitInterval = 1000; 
var sleepInterval = 2000; 

var waitForNewRace = setInterval(
function checkForNewRace(){ 
    if ($("#data").html() == "1"){   
     $("#res").html("got it!"); 
    } 
    else{ 
     $("#counter").html(br); 
     if (br++ > 9) 
      waitInterval = 3000;    
    }     

    $("#tst").html(waitInterval); 
}, 
waitInterval 
); 

あなたがここにそれをチェックアウトしたい場合はjsfiddleに言及したコードは次のとおりです。http://jsfiddle.net/Hitman666/Vyczj/2/

答えて

1

間隔を停止して再起動する必要があります。 jsfiddleのthis forkを参照してください。

編集:私は何かがあなたのjsfiddleコードで発生した場合にここにあなたのコードをコピーした:

var br = 0; 
var waitInterval = 1000; 
var sleepInterval = 2000; 


function checkForNewRace(){ 
    if ($("#data").html() == "1"){   
     $("#res").html("got it!"); 
    } 
    else{ 
     $("#counter").html(br); 
     if (br++ > 5){ 
      clearInterval(waitForNewRace); 
      waitInterval += 1000; 
      if (waitInterval > 10000) 
       waitInterval = 10000; 

      waitForNewRace = setInterval(
       checkForNewRace, 
       waitInterval 
      ); 
     } 
    }     
    $("#tst").html(waitInterval); 
} 

var waitForNewRace = setInterval(
    checkForNewRace, 
    waitInterval 
);   
+0

@Kooilnc:ありがとう!私はあなたの答えをjsfiddleコードで編集しました。 – Nikola

+0

こんにちは@ニコラ、大丈夫です。私はjsfiddleからそれを削除しませんが、jsfiddlesの計画については決して知りません。 – KooiInc

1

私は、これはあなたがやりたいだろうと思う:

var br = 0; 

var waitForNewRace = setInterval(function(){ 
     checkForNewRace(); 
     if(++br == 9){ 
      clearInterval(waitForNewRace); 
      setInterval(checkForNewRace, 3000); 
     } 
    }, 1000); 

function checkForNewRace(){ 
    if($("#data").html() == "1"){ 
     $("#res").html("got it!"); 
     clearInterval(waitForNewRace); 
    }else 
     $("#counter").html(br); 
    $("#tst").html(waitInterval); 
} 
0

はclearInterval使用することができます

var br = 0; 
var waitInterval = 1000; 
var sleepInterval = 2000; 

var waitForNewRace = setInterval(checkForNewRace, 
    waitInterval 
);  




function checkForNewRace(){ 
    console.log(waitForNewRace); 
    if ($("#data").html() == "1"){   
     $("#res").html("got it!"); 
    } 
    else{ 
     $("#counter").html(br); 
     if (br++ > 9){ 
      waitInterval = 3000;    
      clearInterval(waitForNewRace); 
      br = 0; 


       waitForNewRace = setInterval(checkForNewRace, 
    waitInterval 
);   
      } 
     }     
    $("#tst").html(waitInterval); 
} 

フィドル:http://jsfiddle.net/Vyczj/5/

0

代替をあなた自身のコードに2行追加するだけでよい:

var br = 0; 
var waitInterval = 1000; 
var sleepInterval = 2000; 

var waitForNewRace = setInterval(
function checkForNewRace(){ 
    if ($("#data").html() == "1"){   
     $("#res").html("got it!"); 
    } 
    else{ 
     $("#counter").html(br); 
     if (br++ > 9){ 
      clearInterval(waitForNewRace); 
      waitInterval = 3000;   
      waitForNewRace=setInterval(checkForNewRace,waitInterval); 
     } 
    }     

    $("#tst").html(waitInterval); 
    }, 
    waitInterval 
); 
関連する問題