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

Polling: Do Get-Request until result suits

本文关键字:结果 获取 请求 轮询      更新时间:2023-09-26

我有以下代码:

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

如果"答案"不是"false",我想等待大约20秒,然后再次执行此请求,以检查它现在是否为"false"以外的内容。

我发现了很多类似的问题,但两个小时后我仍然不知道该怎么做。主要问题是20秒的"睡眠"。如果我不这样做,当答案出来时,如果围绕ajax调用调用函数,我会得到太多递归。

类似:

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

您研究过使用setTimeout吗?这就是在等待X毫秒后执行函数的方式。所以,如果你想等5秒,你可以这样做:

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

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

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

setTimeout(doCall,5000)

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

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

这应该有效,这与是一样的

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

除了现在我们正在创建一个无名函数并同时传递它。

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

console.time('someFunction');
someFunction(); // run whatever needs to be timed in between the statements
console.timeEnd('someFunction');

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

如果是这样的问题,请告诉我:)