@dmitriyivvv

Node.js event loop и async await?

Имеется следующий код:
//добавляет путь файла в очередь string[];
enqueue(filePath: string): void {
    this.queue.push(filePath);

    if (!this.processing) {
      this.processing = true;
      this.ftp.connect().then(this.drain.bind(this));
    }
  }

// начинает извлекать пути из очереди, пока она не опустошится полностью
async drain(): Promise<void> {
    if (this.queue.length) {
      const filePath = this.queue.shift();
      const fileStream = await this.ftp.get(filePath);
      fileStream .on('data', chunk => this.entries.push(chunk.toString())).on('end', () => this.drain());
    } else {
      this.processing = false;
      await this.ftp.disconnect();
    }
  }


Интересует такой вопрос. Может ли возникнуть ситуация когда очередь опустошилась и был вызван метод drain который установил this.processing = false и начинает await'ить отключение от фтп сервера (насколько я знаю если он натыкается на await управление передается дальше, и event loop соотв. не блочится), и может ли в этот момент произойти вызов метода enqueue который попытается соединится с фтп сервером (т.к. флаг this.processing === false) и соотв. отключиться он еще не успел, а уже попытается соединиться заново, что в теории может привести к ошибке. Может ли возникнуть такая ситуация или из-за специфики работы event loop'a нет? Если можно поподробнее.
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ответы на вопрос 1
@abberati
frontend-разработчик
Напиши функцию
const delay = ms => new Promise(res => setTimeout(red, ms))

И поэкспериментируй.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
16 апр. 2024, в 14:03
5000 руб./за проект
16 апр. 2024, в 13:17
5000 руб./за проект