Ниже пример реализации класса Queue с методом run, который последовательно выполняет асинхронные функции. Каждая функция получает next для вызова следующей. Если возникает ошибка, выполнение прерывается. Методы поддерживают цепочку вызовов.
Реализуйте метод run класса Queue так, чтобы реализация соответствовала примеру использования. Метод run должен последовательно выполнять передаваемые в него асинхронные функции. Следующая функция в очереди может быть вызвана только после вызова next. Если в одной из функций произошла ошибка, последующие функции не вызываются. Методы должны поддерживать цепочку вызовов (chaining).
Ниже пример реализации класса Queue с методом run, который последовательно выполняет асинхронные функции.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Ниже пример реализации класса 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();