简体   繁体   English

jquery并行ajax调用一个接一个循环

[英]jquery parallel ajax calls loop one after another

When i execute below script it creating all 1000 ajax requests and when the transaction gets to about ~3k it never did finish.当我执行下面的脚本时,它会创建所有 1000 个 ajax 请求,当事务达到约 3k 时,它从未完成。 so i am trying to make slab based parallel ajax requests,所以我试图制作基于slab的并行ajax请求,

How do i create parallel ajax requests one after another?如何创建一个接一个的并行 ajax 请求? I want to create first 100 parallal ajax requests after completing the 1st 100 ajax responses then create 2nd position 200 parallel ajax requests.我想在完成第一个 100 个 ajax 响应后创建前 100 个并行 ajax 请求,然后创建第二个位置 200 个并行 ajax 请求。

Here is my array这是我的数组

var tasks=[{100 urls},{200 urls},{400 urls},{600 urls},{800 urls},{1000 urls}];
$.each(tasks,function(index,item){
  $.each(item.urls,function(key,val){
    $.aja(val.url,function(response){
    // .... do some work
    });
  });
});

Every ajax call runs asynchronously.每个 ajax 调用都是异步运行的。 So you may wait each task's async ajax calls done and run next task and so on.所以你可以等待每个任务的异步 ajax 调用完成并运行下一个任务等等。

Below script uses Promise pattern( jquery.when ) to wait done each task's async ajax calls.下面的脚本使用 Promise 模式( jquery.when )来等待完成每个任务的异步 ajax 调用。

var tasks=[{100 urls},{200 urls},{400 urls},{600 urls},{800 urls},{1000 urls}];

function runTasks(index) {
  var item = tasks[index];
  return $.when($.map(item.urls, function(key, val) {
    return $.ajax(val.url);
  })).then(function() {
    if (tasks[index + 1]) {
      return runTask(index + 1);
    } else {
      return true;
    }
  });
}

runTasks(0).then(function() {
  // execute when all tasks done
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM