Open Twlig opened 2 years ago
处理并发请求,并且要求最大并发数量是10
// 模拟一百条数据 const message = new Array(100).fill(''); for (let i = 0; i < 100; i++) { message[i] = '第' + i + '条数据'; } // 模拟请求一千条数据
//模拟异步请求出现部分错误 function getAxiosMessage(idx) { return new Promise((resolve, reject) => { setTimeout(()=>{ if(idx % 7 == 1) { reject('错误' + idx) } else { resolve(message[idx]) } }, 1000) }) }
//异步获取消息 /* 1. 用race来保证并发任务队列的大小 2. 考虑出现reject情况下,对错误进行收集 */ async function getAsyncMessage(max = 10) { var task = [] var ans = [] var errArr = [] for(let i = 0; i < 100; i++) { const p = getAxiosMessage(i).then(res => { ans.push(res) task.splice(task.indexOf(p), 1) },err => { //假如发生超时等,加入reject数组,或者是重新执行 console.log('错误' + i) errArr.push(err) task.splice(task.indexOf(p), 1) }) task.push(p) if(task.length == max) { await Promise.race(task) } } await Promise.allSettled(task) return [ans, errArr] }
getAsyncMessage().then(res=>{ console.log(res[0]) console.log(res[1]) })
处理并发请求,并且要求最大并发数量是10