Sobes.tech
Middle+

Queue sinfining run metodini bajarish uchun, foydalanish misoliga mos keladigan tarzda amalga oshiring. run metodi unga uzatilgan asinxron funksiyalarni ketma-ket bajarishi kerak. Navbatdagi funksiya faqat next chaqirilgandan so'ng chaqirilishi mumkin. Agar funksiyalardan birida xato yuzaga kelsa, keyingi funksiyalar chaqirilmaydi. Metodlar zanjirli chaqirishni (chaining) qo'llab-quvvatlashi kerak.

sobes.tech AI

AIdan javob

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