微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript异步竞争条件

有一些对象,它们使用并行的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可以由两个“线程”同时编辑.如何避免竞争条件的机会?

解决方法:

是否有可能重新编写您的AJAX,以便一切都在一个请求中?系统的这一部分将是最大的瓶颈,并且可能会变得棘手(正如您已经发现的那样),因此您提出的请求越少越好.

我能想到的另一种方法是,如果每个请求都改变了它的相关对象,设置了一个标志值或者其他东西,然后你循环遍历所有对象以检查是否所有的标志都已经设置好了.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐