Middle+
Υλοποιήστε τη μέθοδο run της κλάσης Queue έτσι ώστε η υλοποίηση να αντιστοιχεί στο παράδειγμα χρήσης. Η μέθοδος run πρέπει να εκτελεί διαδοχικά τις ασύγχρονες συναρτήσεις που της δίνονται. Η επόμενη λειτουργία στη σειρά μπορεί να κληθεί μόνο μετά την κλήση της next. Αν προκύψει σφάλμα σε μία από τις συναρτήσεις, οι επόμενες δεν καλούνται. Οι μέθοδοι πρέπει να υποστηρίζουν αλυσίδα κλήσεων (chaining).
sobes.tech AI
Απάντηση από AI
Ниже пример реализации класса Queue с методом run, который последовательно выполняет асинхронные функции. Каждая функция получает next для вызова следующей. Если возникает ошибка, выполнение прерывается. Методы поддерживают цепочку вызовов.
class Queue {
constructor() {
this.tasks = [];
this.errorOccurred = false;
}
add(task) {
this.tasks.push(task);
return this; // для chaining
}
run() {
const next = (err) => {
if (err) {
this.errorOccurred = true;
return;
}
if (this.tasks.length === 0) return;
const task = this.tasks.shift();
try {
task(next);
} catch (error) {
this.errorOccurred = true;
}
};
next();
return this; // для chaining
}
}
// Пример использования:
// const q = new Queue();
// q.add(next => { setTimeout(() => { console.log('1'); next(); }, 1000); })
// .add(next => { console.log('2'); next(); })
// .run();