最大并发请求
// 第一次发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); });