我有一个带有数组的for each循环,对于数组中的每个元素,我需要从服务器检索数据,所以我会对每个元素发出ajax请求,并将结果存储在另一个数组中,我需要知道数组中的最后一个元素何时处理完毕,以便显示数据,有没有一种模式,或者我如何在不使事情过于复杂的情况下做到这一点,我认为这就是我正在做的
var array = ['a', 'b', 'c'],
arrayLength = array.length,
completed = 0;
然后,在XHR的回调中,
if (completed == arrayLength) {
// All of them have finished.
}
completed++;
或者,您声明您正在将这些东西添加到一个新数组中。假设完成后数组的长度相等,则可以将回调中的检查更改为(startArray.length == newArray.length)
。
此外,请记住,如果您在循环中进行XHR(假设异步(,它们将大致同时尝试请求(我认为(,这可能是性能问题。考虑编写一个函数,在每个请求的回调中再次调用该函数,这样XHR就可以一次生成一个。增加一个计数器,以便在每次调用中为下一个数组元素添加下标。
一个具有"并行"模式的延续传递库将很好地抽象这一点。我正在使用JooseXCPS,也可以参阅它的教程。
对于您命中的每个成功,计算成功结果,然后触发一个事件。
例如:
var successfulReturns= 0;
$.ajax({
url:"",
success: function() {
successfulReturns++;
$(document).trigger("myapp.loadedComplete");
}
});
然后收听您的活动
$(document).bind("myapp.loadedComplete", function() { } );
这可以让您在循环之外的某个地方测试完成情况。