1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
let mapLimit = (list, limit, asyncHandle) => { let recursion = (arr) => { return asyncHandle(arr.shift()) .then(()=>{ if (arr.length!==0) return recursion(arr) else return 'finish'; }) };
let listCopy = [].concat(list); let asyncList = []; while(limit--) { asyncList.push( recursion(listCopy) ); } return Promise.all(asyncList); }
var dataLists = [1,2,3,4,5,6,7,8,9,11,100,123]; var count = 0;
function asyncLoad (curItem){ return new Promise(resolve => { count++ setTimeout(()=>{ console.log(curItem, '当前并发量:', count--) resolve(); }, Math.random() * 5000) }); }
mapLimit(dataLists, 3, asyncLoad).then(response => { console.log('finish', response) })
|