文章 评论 浏览 26
function multiRequest(urls = [], maxNum) { // 请求总数量 const sum = urls.length; // 根据请求数量创建一个数组来保存请求的结果 const result = new Array(sum).fill(false); // 当前完成的数量 let count = 0; return new Promise((resolve, reject) => { // 请求maxNum个 while (count < maxNum) { next(); } function next() { let current = count++; // 处理边界条件 if (current >= sum) { // 请求全部完成就将promise置为成功状态, 然后将result作为promise值返回 !result.includes(false) && resolve(result); return; } const url = urls[current]; console.log(`开始 ${current}`, new Date().toLocaleString()); fetch(url).then(res => { // 保存请求结果 result[current] = res; console.log(`完成 ${current}`, new Date().toLocaleString()); // 请求没有全部完成, 就递归 if (current < sum) { next(); } }).catch(err => { console.log(`结束 ${current}`, new Date().toLocaleString()); result[current] = err; // 请求没有全部完成, 就递归 if (current < sum) { next(); } }); } }); } const url = `https://www.baidu.com/s?wd=javascript`; const urls = new Array(100).fill(url); (async () => { const res = await multiRequest(urls, 10); console.log(res); })();
文章 0 评论 0
接受
第 153 题:实现一个批量请求函数 multiRequest(urls, maxNum)