轮询:请求获得请求直到结果适合

时间:2016-05-08 14:50:50

标签: javascript jquery ajax sleep

我有以下代码:

$.get( "GetJobResult", { jobId: jobId }, function( answer ) {

})

如果“回答”不是“假”,我想等待20秒并再次执行此请求以检查它是否现在不是“假”。

我发现了许多相似的问题,但两小时后我仍然无法弄清楚如何做到这一点。主要问题是“睡觉”20秒。如果我不这样做,如果在答案到来时调用ajax-call周围的函数,我会得到太多的递归。

像:

function doCall( jobId , test) {
   if (test == "false") {
       $.get( "GetJobResult", { jobId: jobId }, function( answer ) {
            // how to wait here?
            doCall( jobId, answer );
        });
    }
}

我有点卡在这里。谁能帮我?非常感谢!

修改 我已经尝试过像这样的setTimeout:

function doCall( jobId , test) {
       if (test == "false") {
           $.get( "GetJobResult", { jobId: jobId }, function( answer ) {
                setTimeout(
                    doCall( jobId, answer ),
                    20000);
            });
        }
}

2 个答案:

答案 0 :(得分:1)

您是否考虑过使用setTimeout?那就是在等待X毫秒后你将如何执行一个函数。所以如果你想等5秒钟,你会这样做:

setTimeout(function(){ doCall( jobId, answer ); }, 5000)

5000有5000毫秒。这有帮助吗?

编辑:为了澄清,setTimeout中的第一个参数必须是一个函数。所以另一种方法是:

setTimeout(doCall,5000)

但这里存在问题。 setTimeout不知道你想要什么参数。相反,我们可以使用正确的参数创建一个调用doCall的新函数:

var delayedCall = function(){
  doCall(jobId,answer)
}
setTimeout(delayedCall,5000)

这应该有效,而且与:

相同
setTimeout(function(){ doCall( jobId, answer ); }, 5000)

除了现在我们正在创建一个无名功能并同时传入它。

答案 1 :(得分:0)

您可以使用console.time(非标准)

console.time('someFunction');

someFunction(); // run whatever needs to be timed in between the statements

console.timeEnd('someFunction');

注意: 传递给time()timeEnd()方法的字符串必须匹配 (计时器按预期完成)。

如果这是问题,请告诉我。)