轮询:执行 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()
方法的字符串必须匹配
(为了让计时器按预期完成)。
让我知道这是否是问题:)
我有以下代码:
$.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()
方法的字符串必须匹配
(为了让计时器按预期完成)。
让我知道这是否是问题:)