0

私が欲しいのは:

条件が true か false かをテストする関数 check_and_wait() を呼び出します。指定された時間、設定された間隔でチェック/ループを続けます。

プログラムの残りの部分は、このテストの結果を待つ必要があります。これはうまくいかない部分です。setInterval を使用する必要はありません。現在はそのように実装されています。

function test_condition(){
    // do some test. return true or false
}

function check_and_wait(){
    var maxtime = 3000;
    var  start = new Date().getTime();
    condition = false;
    var interval = setInterval(function() {
        if(condition){return true;}
        else{
            if(  new Date().getTime() - start < maxtime ){
               condition = test_condition();
            }
            else{return false;}
        }
    }, 250); 

}

result = check_and_wait();
if(result){
    //do something
}
else{
     //do something else
}
4

3 に答える 3

2

コールバックを使用すると、非同期イベントを操作する方がはるかに簡単になります。

function check(finishCallback, waitingCallback) {
    var maxtime = 3000;
    var start = new Date().getTime();
    condition = false;
    var interval = setInterval(function() {
        if (condition) { 
            finishCallback(); 
        }
        else {
            if (new Date().getTime() - start < maxtime ) {
                condition = test_condition();
            } else {
                waitingCallback(); 
            }
        }
    }, 250); 
}

その後:

check(function() {
    //do something
}, function() {
    //do something else
});
于 2013-04-01T06:06:47.520 に答える
1

非同期プロセスを扱うときは、コールバック関数の使用を検討する必要があります。たとえば、あなたの場合は次のようになります。

function check_and_wait(callback) {
    var maxtime = 3000;
    var  start = new Date().getTime();
    var interval = setInterval(function() {
        if (new Date().getTime() - start < maxtime ){
            if (test_condition()) {
                clearInterval(interval);
                callback();
            }
        }
    }, 250);
}

check_and_wait(function() {
    // do something
});
于 2013-04-01T06:06:25.880 に答える
1

条件が変化したときにコールバックを使用できます。

var interval;
function check_and_wait(){
    var maxtime = 3000;
    var  start = new Date().getTime();
    condition = false;
    interval = setInterval(function() {
        if(!condition)
            if(  new Date().getTime() - start < maxtime ){
               condition = test_condition();
            }
        }
        else {
           callback();
        }
    }, 250); 
}

function callback() {
     clearInterval(interval);
     // do the stuff you do when you're ready
}
于 2013-04-01T06:06:04.463 に答える