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
| 20个请求最多5个
function createTask(i) { return () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(i); }, 2000); }); }; }
class TaskQueue { constructor() { this.max = 5; this.taskList = []; setTimeout(() => { this.run(); }); } addTask(task) { this.taskList.push(task); } run() { let len = this.taskList.length;
if (!len) return false;
let min = Math.min(this.max, len); for (let i = 0; i < min; i++) { this.max--; let task = this.taskList.shift(); task() .then((res) => { console.log("result:", res); }) .catch((error) => { throw new Error(error); }) .finally(() => { this.max++; this.run(); }); } } }
const taskQueue = new TaskQueue(); for (let i = 0; i < 20; i++) { const task = createTask(i + 1); taskQueue.addTask(task); }
|