【发布时间】:2010-11-27 04:08:33
【问题描述】:
有一组对象,这些对象通过并行 ajax 请求进行扩展。当最后一个请求完成时,应该处理数组。我看到的唯一解决方案是:
function expandArray(objects, callback){
number_of_requests=objects.length-1;
for(i in objects){
$.getJSON(request,function(){
//expanding array
if(--number_of_reuests==0){
callback();
}
});
}
}
但是由于请求是并行执行的,因此可能会出现竞争条件。变量 number_of_requests 可以由两个“线程”同时编辑。如何避免出现竞态的机会?
【问题讨论】:
-
如果
objects是一个对象,则没有通用的length属性。如果它是一个数组,你不应该使用for … in,而是使用正常的计数for循环。 -
你是对的,但你可以定义一个带有长度变量的对象。
-
JavaScript 是单线程的,因此变量不可能被两个单独的线程修改。
标签: javascript ajax asynchronous