javascript - for 循环中的 jQuery 延迟队列

标签 javascript jquery ajax deferred

我有以下功能:

function getData(a,url) {
        var deferreds = [];
        var i = 1;
        for (i = 1; i <= a.length; i++) {
            var count = i;
            var back = a[i]['link'];
            var path = "http://example.com";
            deferreds.push(
            $.ajax({
                url:path,
                data:{back:back,link:url},
                type:"POST",
                async: true,
                delay: count
            }).done(function(data) {
                //success function here
            }));
        }


        return deferreds;
    }

我的问题是如何让这个脚本运行一个队列,比如我有2000个请求,如何将它们一一放入100个队列中?

最佳答案

也许是这样(当然是简化)

var completed = 0;
var limit_simultaneous = 100;
var total_requests = 2134 // Assign your var

function send_block() {
    for (i = 0; i < limit_simultaneous; i++) {
        $.ajax({
            url:path,
            data:{back:back,link:url},
            type:"POST",
            async: true,
        }).done(function(data) {
           completed++;
           send_next_block();
           //success function here
        }));
    }
}

function send_next_block() 
{
    if (completed == limit_simultaneous && total_requests > 0) {
        total_requests = total_requests - completed;
        if (total_requests < limit_simultaneous) {
            limit_simultaneous = total_requests;
        }
        completed = 0;
        // Fire again
        send_block(); // Send another 100
    }
}

希望对您有所帮助。

编辑 编辑以考虑总请求数。也许不是一个有效的代码,但它是想法。

关于javascript - for 循环中的 jQuery 延迟队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30215740/

相关文章:

javascript - 如何从异步调用返回响应?

javascript - 使用 Google 脚本在 Google Sheet GUI 中使用 <href> 标记

javascript - 使用 Grails 实现服务器端事件

javascript - View 不使用数据呈现

php - 如果发送/接收 jQuery AJAX 数据,是否可以只接收部分数据?

ajax - 使用 ajax 在 Vue 组件中显示数据

javascript - 尝试从 url 读取标题时发生 Angularjs 错误

javascript - 在 Javascript 中按日期分组

javascript - 谷歌地图标记在移动设备中悬停时显示标签

jquery - Zend 和 jQuery - 由许多操作组成的表单