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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| const fn = (url) => { return new Promise((resolve, reject) => { console.log('完成一个任务', url, new Date()); resolve({ url, date: new Date(), }) }) }
function limitQueue(urls, limit) { let fulfilledIndex = 0; for (let executeIndex = 0; executeIndex < limit; executeIndex++) { run(); }; function run() { new Promise((resolve, reject) => { let url = urls[fulfilledIndex++]; resolve(fn(url)); }).then(() => { if (fulfilledIndex < urls.length) { run(); } }) } }
const urls = [1,2,3,4,5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
(async _ => { await limitQueue(urls, 4); })();
|