Не удается выполнить отправку в массив с помощью метода Node EventEmitter .on

#arrays #node.js #push #eventemitter

#массивы #node.js #толкать #eventemitter

Вопрос:

Используя readLine для чтения из файла, у меня есть:

 fs       = require 'fs'
readline = require 'readline'
stream   = require 'stream'

instream           = fs.createReadStream './test.txt'
outstream          = new stream
outstream.readable = true
outstream.writable = true

rl = readline.createInterface({input: instream, output: outstream, terminal: false})

arr = []

rl.on 'line', (line) ->
  arr.push line

console.log arr
  

Я пытаюсь перенести каждую строку в массив, но обратный вызов в rl.on , похоже, не завершает push() метод, но если я заменю push на console.log , он напечатает каждую строку файла. Я понимаю, что, вероятно, есть гораздо лучшие способы достижения того же результата, но этот эксперимент провалился, и я не понимаю почему.

Почему .on обратный вызов не может передать строку в массив?

Комментарии:

1. Проблема не в том, что данные не помещаются в массив, а в том, что вы регистрируете массив перед отправкой данных. Обратный вызов является асинхронным и console.log синхронным.

2. Вы имеете в виду, что console.log вызывается перед считыванием данных из файла?

3. Действительно. Если вы хотите записать массив после чтения файла, поместите console.log внутрь close обработчика событий для интерфейса readline.