Sobes.tech
Middle+

Queue классынын run ыкмасын ишке ашырыңыз, анын иштеши колдонуу мисалына ылайык келсин. 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();