最大并发请求

// 第一次发3个
// 开始执行
//    1.    urls.pop
//    2.    添加进栈,保序
// 执行完一个,
//    1.    回到栈,更新栈里的信息
//    2.    继续检测是否有剩余的,有则继续,无则停止
//            或者直接继续, 在每次开始时检测是否需要继续
//    3.    检测是否执行完
//            (需要添加标记,统计执行总数)
//
function sendRequest(urls, num, callback) {
    let loadnum = 0;
    const count = urls.length;
    const res = [];
    for (var i = 0; i < num; i++) {
        get();
    }

    function get() {
        var uri = urls.shift();
        var time = Math.random() * 10000;

        if (!uri) {
            return;
        }
        (function(u) {
            res.push({
                uri: uri,
                loaded: false
            });
            console.log(time);
            setTimeout(function() {
                setLoaded(u);
                get();
            }, time);
        })(uri);

    }

    function setLoaded(uri) {
        console.log(uri);
        for (var i = 0; i < res.length; i++) {
            if (res[i].uri === uri) {
                res[i].loaded = true;
                loadnum++;
                if (loadnum == count) {
                    callback(res)
                }
            }
        }
    }
}
sendRequest(['baidu', 'taobao', 'sina', 'qq', 'sohu'], 3, function(res) {
    console.log(res);
});

 

posted @ 2020-09-11 23:08  潴哥  阅读(160)  评论(0编辑  收藏  举报