2016-05-01 21 views
3

何らかの時間が経過したとき(たとえば5秒)または何らかの条件が満たされたとき(たとえばbool = true)に実行できるコードを作成するには、 - のいずれか最初に来る。スクリプトが最初に実行されたときから5秒間が始まり、ブール値は別の関数によって変更されたグローバルです。タイムアウトとブールチェックを1つのステートメントで組み合わせることはできないと思いますが、別の良い方法もあります。時間が経過した、または条件が満たされた後にコードを実行する

擬似コード:

if (bool = true OR timePassed = 5000): 
    runCode() 
+0

毎秒条件が真であるかどうかを確認しますか? – Edward

+0

@エドワード過剰殺人のようだ。より良い方法でなければならない。 –

+0

フラグを使用すると、最初に条件が実行され、最初にフラグが変更され、関数はnomore – maioman

答えて

0

Noneになりますつまりのいずれかが最初に来るかが実装されていないか、最終コードが2回実行されます。

タイマーと条件が必要です(他の回答は示唆されていますが、1つの全体で結合できませんでした)。

var done = false; 
var thisTimeout = setTimeout(function() { 
    myFunction(); 
}, 1000); 

if ((someCondition) && !done) { 
    myFunction(); 
} 
function myFunction() { 
    clearTimeout(thisTimeout); 
    done = true; 
    // Do stuff 
} 
-1

あなたが探しているもののsetTimeoutませんか?

setTimeout(function() { 
    if (mycondition) { 
     //do work 
    } 
}, 1000); 

1000ms待機してステートメントを実行します。ブール条件がイベントベースのものであれば、それを聞くことができます。ブール値が真になる原因は何ですか?

setInterval(function() { 
    if (mycondition) { 
     //do work 
    } 
}, 100); 

んあなたを助ける:タイムアウトは無関係ですので、私達はちょうど条件におそらく100msごとにチェックする必要があるようですね?

だから、完全なソリューション:

var mytimeout, myinterval; 
mytimeout = setTimeout(function() { 
     //do work 
     clearInterval(myinterval); 
}, 5000); 
myinterval = setInterval(function() { 
     if (condition) { 
      clearTimeout(mytimeout); 
      //dowork 
     } 
}, 100); 
+1

いいえ条件が満たされたときまたはタイマーがなくなったときに何らかのコードを実行したい。いずれか早い方。 –

+0

そして、条件をチェックするだけの小さな間隔と、完了したらコードを実行するタイムアウトの両方を使用します。どちらか一方がもう一方をキャンセルすると実行されます。 – PeterS

0

次のコードは、2つのグローバル変数、conditionsecondsを使用しています。 conditiontruesecondsでない場合、タイマーは1秒ごとに増大秒を実行し、制限時間に達する前に、タイムアウトを設定し、関数が呼び出された場合、それを取り消すことができます以上の4

condition = false // global 
seconds = 0 // global 

var timer = setInterval(function() { 
if (condition || seconds > 4) { 
    clearInterval(timer) 
} 
seconds+=1; 
}, 1000); 
2

ではありません。

var timeout = setTimeout(function() { 
    runCode(); 
}, 5000); 

function runCode() { 
    clearTimeout(timeout); 
    ... 
} 

編集:今、私はそれについて考えることを、このインスタンス内のタイムアウトを設定するためのより良い方法は、実際には質問に完全な答えを提供回答の

var timeout = setTimeout(runCode, 5000); 
+0

ブール値*が設定される前にタイマーがなくなったらどうしますか?あなたはそれをどうやって取り消しますか? –

+0

@BramVanroyこの条件が既に満たされているかどうかを示すフラグが必要です(http://stackoverflow.com/a/36971492/2788872)。 –

0
window.onload = function(){ 
    var timer = setTimeout(RunCode, 5000); 
    function RunCode(){ 
     //do something 
     //RunCode() already done and we don't want to run it second time 
     element.onevent = function(){}; 
    } 
    //pseudo code 
    element.onevent = function(){ 
     clearTimeout(timer); 
     RunCode(); 
    } 
    //possibly more event handlers with similar logic 
} 
関連する問題