我有一个异步填充的数组,包含28个项目。我想等到阵列充满所有项目。
function checkIfFinished(){
return(Results.length >= 28);
}
var isfinished = false;
while(isfinished){
if(checkIfFinished()){
returnResults();
isfinished = true;
}
else
//Wait 100ms
}
好吧,但是在Javascript中没有等待功能!我尝试使用setTimeout,但我不知道如何插入它...我只是因为太多的递归和东西而得到错误:D
谢谢!
答案 0 :(得分:11)
尝试:
var timeout = setInterval(function()
{ if(checkIfFinished()) { clearInterval(timeout); isFinished = true; } }, 100);
这将每隔100毫秒调用一次检查函数,直到checkIfFinished()给你回真。
答案 1 :(得分:3)
如果您使用的是jQuery 1.5+,这听起来像是在代码中使用deferred objects and promises的绝佳机会。我假设您正在使用AJAX调用来填充数组。
简而言之,这样的事情对你有用:
$(function() {
var $ajaxcalls = [],
myArray = [];
// set up all the ajax calls that will populate my array
for(var i=0; i < 28; i++) {
$ajaxcalls[i] = $.ajax({
url : 'http://your.domain.com/blah',
data : i
}).success(function(m) {
myArray.push(m);
});
}
// this will setup the promise ---
// what will run when all 28 AJAX calls complete?
$.when.apply(null, $ajaxcalls).then(function() {
returnResults();
});
});
我也是written about this some time back。我真的认为这是一个非常好的功能/概念,如果使用得当可以非常强大。 Javascript计时器和计划也应该可以正常工作,但它们可能很笨拙,并且可能会在实际完成逻辑触发之前产生一些等待时间。