// 第一次发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);
});