设计一个异步队列,并发数量为n
题目描述
实现一个 taskpool
类,其至少具有 add
方法和最大并发数 max
,该 add
方法接收函数(返回值为 promise
),当当前执行的任务数小于设定值 max
时,立即执行,大于 max
,则等待任务空闲时执行该任务,模版代码如下:
class TaskPool {
// 在此处写下你的实现
}
const taskpool = new TaskPool(2);
for (let i = 0; i < 10; i++) {
const task = () => new Promise(resolve => {
// 这里 i 的值也是以前非常高频的闭包题哦
setTimeout(() => {
console.log(`task${i} complete`);
resolve(`task${i}`);
}, 2000);
});
taskpool.add(task);
}
// 预期输出
// 2s 后
// task0 complete
// task1 complete
// 再 2s 后
// task2 complete
// task3 complete
// 再 2s 后
// task4 complete
// task5 complete
// ...
// task8 complete
// task9 complete