我有以下代码:
$.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);
});
}
}
答案 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()
方法的字符串必须匹配
(计时器按预期完成)。
如果这是问题,请告诉我。)