轮询:执行 Get-Request 直到结果合适

Polling: Do Get-Request until result suits

我有以下代码:

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

})

如果 "answer" 不是 "false",我想等 20 秒,然后再次执行此请求以检查它现在是否不是 "false"。

我发现了很多类似的问题,但两个小时后我仍然不知道该怎么做。主要问题是 "sleeping" 持续 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 毫秒。有帮助吗?

编辑:澄清一下,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() 方法的字符串必须匹配 (为了让计时器按预期完成)。

让我知道这是否是问题:)