Sobes.tech
Middle+

Rakenda Queue klassi meetodi run nii, et selle rakendus vastaks näidisele. Run meetod peab järjekindlalt täitma talle antud asünkroonseid funktsioone. Järjekorras olev järgnev funktsioon saab olla kutsutud ainult pärast next kutsumist. Kui ühes funktsioonis tekib viga, ei kutsuta järgmisi funktsioone. Meetodid peavad toetama ahelkõnesid (chaining).

sobes.tech AI

Vastus AI-lt

Ниже пример реализации класса 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();