我想要的是:
调用函数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
}
答案 0 :(得分: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
});
答案 1 :(得分: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
}
答案 2 :(得分: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
});