等待async ajax请求完成

Igo*_*tis 6 ajax jquery loops asynchronous

我想写一个执行十几个异步ajax请求的函数,等待所有的完成,然后返回聚合信息.喜欢:

function countHealthy(urls) {
  var healthy = 0;
  for (var i = 0; i < urls.length; ++i) {
    $.ajax({url: urls[i], async: true, id: i})
    .done(function (data) { ++healthy; });
  }
  // Wait for all ajax to finish.
  return healthy;
}
Run Code Online (Sandbox Code Playgroud)

PS:++健康线程安全吗?

hvg*_*des 6

Javascript没有线程,所以线程安全不是问题.你的return语句是问题,它需要进入ajax调用在完成时执行的回调.由于ajax是异步发生的,因为代码代表,return语句将在所有请求返回之前触发.

您可能想要查看查询延迟,这似乎是出于这种类型的事情.直接来自该链接

function doAjax() {
  return $.get('foo.htm');
}

function doMoreAjax() {
  return $.get('bar.htm');
}

$.when( doAjax(), doMoreAjax() )
  .done(function() {
    console.log( 'I fire once BOTH ajax requests have completed!' );
  })
  .fail(function() {
    console.log( 'I fire if one or more requests failed.' );
  });
Run Code Online (Sandbox Code Playgroud)

通过一些小的重构,您可以在大约2分钟内实现这一点.

或者,如果您控制服务器,则可以创建一个服务器端点,该端点在一个请求中执行所有检查.