Здравствуйте, я пытаюсь реализовать два класса, которые имеют дело с асинхронными задачами в JavaScript: один класс называется Task, который запускает задачу с помощью setTimeout, другой класс называется TaskManager, который использует возможности для ограничения количества задач, которые могут быть выполнены одновременно.Я подумал, что если бы я мог просто рекурсивно вызывать функцию цикла, чтобы продолжать проверять, выполнено ли одно задание, я мог бы перейти к следующему заданию.Может кто-нибудь дать мне указания, где я могу это исправить?(Кроме того, я буду очень признателен, если кто-нибудь сможет предоставить несколько подобных асинхронных упражнений / веб-сайтов JS для практики)
class Task {
constructor(time) {
this.time = time;
this.running = 0;
}
run(limit, jobs, index) {
setTimeout(() => {
console.log('hello', index);
this.done(limit, jobs, index);
}, this.time);
}
done(limit, jobs, index) {
jobs.splice(index, 1);
console.log(jobs);
}
}
class TaskManager {
constructor(capacity) {
this.capacity = capacity;
this.jobs = [];
this.index = 0;
this.running = 0;
this.pending = [];
}
push(tk) {
this.jobs.push(tk);
this.index += 1;
const loop = () => {
if (this.jobs.length === 0) {
return;
}
if (this.jobs.length <= this.capacity) {
this.running += 1;
tk.run(this.capacity, this.jobs, this.index-1);
return;
}
loop();
}
loop();
}
}
const task = new Task(100);
const task1 = new Task(200);
const task2 = new Task(400);
const task3 = new Task(5000);
const task4 = new Task(6000);
const manager = new TaskManager(3);
manager.push(task);
manager.push(task1);
manager.push(task2);
manager.push(task3);
manager.push(task4);