Sobes.tech
Middle+

Implémentez la méthode run de la classe Queue de manière à ce que l'implémentation corresponde à l'exemple d'utilisation. La méthode run doit exécuter séquentiellement les fonctions asynchrones qui lui sont passées. La fonction suivante dans la file d'attente ne peut être appelée qu'après l'appel de next. Si une erreur se produit dans l'une des fonctions, les fonctions suivantes ne sont pas appelées. Les méthodes doivent supporter la chaîne d'appels (chaining).

sobes.tech IA

Réponse de l'IA

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