javascript:等待使用setInterval的函数的结果

javascript:等待使用setInterval的函数的结果,javascript,Javascript,我想要的是: 调用一个函数check_和_wait(),该函数测试一个条件是真还是假。它将以设定的间隔在指定的时间内保持检查/循环 程序的其余部分必须等待此测试的结果。这是出错的部分。它不必使用setInterval,这就是它现在的实现方式 function test_condition(){ // do some test. return true or false } function check_and_wait(){ var maxtime = 3000; va

我想要的是:

调用一个函数check_和_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
}
功能测试\u条件(){
//做一些测试。返回真或假
}
函数检查和等待(){
var maxtime=3000;
var start=new Date().getTime();
条件=假;
var interval=setInterval(函数(){
if(条件){return true;}
否则{
if(new Date().getTime()-start
您可以使用一个回调,该回调将在条件更改时中断:

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
}
var区间;
函数检查和等待(){
var maxtime=3000;
var start=new Date().getTime();
条件=假;
间隔=设置间隔(函数(){
如果(!条件)
if(new Date().getTime()-start
您可以使用一个回调,该回调将在条件更改时中断:

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
}
var区间;
函数检查和等待(){
var maxtime=3000;
var start=new Date().getTime();
条件=假;
间隔=设置间隔(函数(){
如果(!条件)
if(new Date().getTime()-start>P>当你处理异步进程时,你应该考虑使用回调函数。例如,在您的情况下,它可能是:

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
});
函数检查和等待(回调){
var maxtime=3000;
var start=new Date().getTime();
var interval=setInterval(函数(){
if(new Date().getTime()-start>P>当你处理异步进程时,你应该考虑使用回调函数。例如,在您的情况下,它可能是:

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
});
函数检查和等待(回调){
var maxtime=3000;
var start=new Date().getTime();
var interval=setInterval(函数(){
if(new Date().getTime()-start
使用回调如何,使用异步事件更容易:

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); 
}

使用回调如何,使用异步事件要容易得多:

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()函数内部吗?所以,如果我需要等待其他东西,那么这将是另一层嵌套?你不能在javascript中等待。这没有道理。如果您有很多代码(您调用的是代码的其余部分),只需将其放入一个函数中,然后从相应的回调函数调用该函数即可。如果您想使用异步javascript(如AJAX、setInterval等),您应该习惯于使用回调函数编程。你越早习惯这种新的编码风格,你所要忍受的痛苦就越少:-)我知道我讨厌javascript;我只是不知道有多少!我一直在用js编写PhantomJS。谢谢你的回答。我希望避免这种嵌套代码:函数嵌套在函数中的函数。如果我又要等什么呢?我的所有其他代码现在都需要进入check()函数内部吗?所以,如果我需要等待其他东西,那么这将是另一层嵌套?你不能在javascript中等待。这没有道理。如果您有很多代码(您调用的是代码的其余部分),只需将其放入一个函数中,然后从相应的回调函数调用该函数即可。如果您想使用异步javascript(如AJAX、setInterval等),您应该习惯于使用回调函数编程。你越早习惯这种新的编码风格,你所要忍受的痛苦就越少:-)我知道我讨厌javascript;我只是不知道有多少!我一直在用js编写PhantomJS。谢谢你的回答。