2016-06-21 5 views
0

私は現在、setIntervalメソッド内でいくつかのコードを実行する関数を持っています。これは期待どおりに動作しています。問題は、このタイマー内で条件付きでコードを実行することです。条件が満たされていない場合は、再度試行するまでタイムアウトを待機します。遅延を「スキップ」し、条件が満たされたときにのみ実行する方法がありますか?JavaScriptインターバル内のスキップタイマー

私のデモでは、段落の結果4と8の出力間に遅延があることがわかります(チェック間の遅延として)。私は全体の手順を通して一貫した遅延が存在することを望みます。

DEMOはhttps://jsfiddle.net/jdec4h0x/

var intAdd = setInterval(function() { 
    refIndex++ 

    if(refIndex >= predefinedMaxLimit) { 
    refIndex = 0; 
    loopedThrough = true; 
    } 

    // if this exists then increment refIndex and try again 
    if (loopedThrough || !$(".myclass[data-mydata1='" + predefinedData2 + "'][data-mydata2='" + refIndex + "']").length) { 
    counter++; 

    $('p').last().after('<p>IN Cond Ref = ' + refIndex + '</p>'); 


    // ** js code within this tiemout ** 

    if (counter >= predefinedOutputP) clearInterval(intAdd); 
    } 
}, 500); 
+1

もちろん、単純にタイマーをキャンセルし、新しい遅延で新しいものを作ります。 –

+0

なぜdownvote? –

+0

@KevinBは動作しません。タイマーの有効範囲がhttps://jsfiddle.net/jdec4h0x/1/です。 –

答えて

0

あなたは間隔の遅延を変更することはできません。あなたが破棄して、Kevin Bが言ったように間隔を作成するか、またはいつも呼び出す必要があるsetTimeoutを使用してから、条件に応じて遅延などを使用します。

/* ... */ 

if (conditionIsMet) intAdd = setTimeout(function() {}, 1000); 
else intAdd = setTimeout(function() {}, 1); 

/* ... */ 

here

0

他のユーザーが指摘したようにmultjpleアプローチがあります。

私はsetTimeoutを使用します。私はこれをループの中にある関数に入れます。 whileループでこれを行うことができます。これは、条件が満たされたときに脱出する能力を与えます。各ループでタイマーをインクリメントする必要があります。

フィドルhttps://jsfiddle.net/jdec4h0x/4/

while (progress) { 
    refIndex++ 

    if (refIndex >= predefinedMaxLimit) { 
    refIndex = 0; 
    loopedThrough = true; 
    } 
    if (loopedThrough || !$(".myclass[data-mydata1='" + predefinedData2 + "'][data-mydata2='" + refIndex + "']").length) { 
    counter++; 
    myTimer = myTimer + 500; 
    console.log(refIndex); 

    myFunction(refIndex); 

    if (counter >= predefinedOutputP) { 
     $('p').last().after('<p>Cleared Interval</p>'); 
     progress = false; 
    } 
    } 
} 

function myFunction(ref) { 
    setTimeout(function() { 
    $('p').last().after('<p>IN Cond Ref = ' + ref + '</p>'); 
    // ** js code within this tiemout ** 
    }, myTimer) 
} 
関連する問題