题目
根据题意可知,要手动实现一个 TaskQueue 类 来实现 promsie 请求 的并发数量控制
function timeout(time) {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, time);
});
}
const taskQueue = new TaskQueue(); // 实现这个 TaskQueue
function addTask(time, name) {
taskQueue.add(() => timeout(time)).then(() => {
console.log(`任务 ${name} 完成`);
});
}
addTask(10000, 1); // 10000 后输出:任务 1 完成
addTask(5000, 2); // 5000 后输出:任务 2 完成
addTask(3000, 3); // 8000 后输出:任务 3 完成
addTask(4000, 4); // 12000 后输出:任务 4 完成
addTask(5000, 5); // 15000 后输出:任务 5 完成
解答
class TaskQueue {
constructor(limitCount = 2) {
this.limitCount = limitCount; // 并发数量
this.runingCount = 0; // 正在运行的任务数
this.tasks = [];
}
add(task) {
return new Promise((resolve, reject) => {
this.tasks.push({ task, resolve, reject });
this._run();
});
}
_run() {
while (this.runingCount < this.limitCount && this.tasks.length) {
const { task, resolve, reject } = this.tasks.shift();
this.runingCount++;
task()
.then(resolve, reject)
.finally(() => {
this.runingCount--;
this._run();
});
}
}
}
打赏作者
您的打赏是我前进的动力
微信
支付宝
OAuth2.0👉 案例:实现 WeChat 授权登录
上一篇
评论