2016-04-08 30 views
1

ここでは、2秒ごとに自動実行するコードがあります。ただし、関数roll()の実行に要する時間は、インターネット接続のピークとボトムによって変化します。関数roll()が2秒ごとに自動的に実行されるようにしようとしていますが、コードは関数が完全に実行されてから自動的に実行されるまで待たなければなりません。Javascriptでコードをx秒ごとに実行する方法はありますが、関数が完全に実行される前に待ちますか?

P.S.この質問のより良いタイトルの提案は感謝します。

var init = 0.01 

var start = init 
var $odds = $("#oddsOverUnder") 
var $button = $("#roll") 
var $bet = $("#bet") 

function roll() { 
    $bet.val(start) 
    $button.click() 
    setTimeout(function() { 
     var tr = document.querySelector("#myBetsTable tr:nth-child(2)") 
     var cls = tr.getAttribute('class') 
     if (cls === 'success'){ 
      start = init 
      $bet.val(start)} 
     else{ 
      start = start * 2 
      $bet.val(start) 
      $odds.click()} 
      $button.click(); 
    setTimeout(function() { 
      $button.click(); 
      },1000); 
      },1000); 
} 

setInterval(roll, 2000) 
+0

間隔を使用しないでください。長時間実行ルーチンの最後にsetTimeoutを呼び出します。 – dandavis

+0

そしてループを使って何度も何度も自動実行されますか? – Recuvan

+0

いいえ、ループは必要ありません。 'roll()'の一番下から 'setTimeout(roll、n)'だけ – dandavis

答えて

1

setIntervalは使用しないでください。終了したかどうかに関係なく、経過時間の後に関数を呼び出そうとします。 setTimeoutは、呼び出されるタイミングを制御できるので、より優れています。そして、あなたは、通常、関数の終わりにそれを呼び出すだけです(それ自身を呼び出します)。

など。

function draw() { 
    // Some drawing here... 
    setTimeout(draw, 50); 
} 

したがって、上記のdraw()を呼び出すと、操作が実行され、50ミリ秒待ってから再度繰り返し呼び出します。

詳細については、hereを参照してください。

0

ロール機能にsetTimeoutを追加して最後に呼び出しました。

var init = 0.01 

var start = init 
var $odds = $("#oddsOverUnder") 
var $button = $("#roll") 
var $bet = $("#bet") 

function roll() { 
    setTimeout(roll, 2000) 
    $bet.val(start) 
    $button.click() 
    setTimeout(function() { 
     var tr = document.querySelector("#myBetsTable tr:nth-child(2)") 
     var cls = tr.getAttribute('class') 
     if (cls === 'success'){ 
      start = init 
      $bet.val(start)} 
     else{ 
      start = start * 2 
      $bet.val(start) 
      $odds.click()} 
      $button.click(); 
    setTimeout(function() { 
      $button.click(); 
      },1000); 
      },1000); 
} 

roll() 
0

最高のは、このようsoemethingを行うには、次のようになります。

function roll() { 
    var time = Date.now(); 
    //your stuff goes here 
    setInterval(roll, Math.max(2000 - (Date.now() - time)), 1); 
} 

これは、呼び出しの間の時間のTGE量を最適化しようとすると、その関数は1.5秒かかった場合、それは0.5秒後に起動します。

+0

私は "ブラウザの遅延を出さずに"と言った) – Recuvan

+0

だから、関数の終わりと次のものの始まりの間に2秒のberweenが必要です。 –

関連する問題