Прервать и продолжить Node.js асинхронное чтение строки для цикла

#node.js

#node.js

Вопрос:

Я использую Node.js интерфейс readline для чтения файла построчно с использованием асинхронного цикла for-of. Но я хочу иметь возможность управлять потоком, и я не уверен, как прервать и продолжить цикл с того места, где он остановился.

Упрощенный пример:

   const fileStream = fs.createReadStream('input.txt')

  const  rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  })

 for await (const line of rl) {
   console.log(line) // This works
   break
 }

 for await (const line of rl) {
   console.log(line) // This does not print anything
 }
 

Смотрите Этот повтор для полного примера.

Как мне использовать тот же интерфейс строки чтения, чтобы продолжить цикл с того места, где он остановился?

Ответ №1:

Асинхронные генераторы закрывают базовый поток после выхода из цикла. Поэтому я пошел на это вместо:

     const it = this.lineReader[Symbol.asyncIterator]()

    while (true) {
      const res = await it.next()
      if (res.done) break
      line = res.value.trim()
    }