Событие 'line'
будет генерироваться каждый раз, когда rl
читает новую строку, поэтому вы должны просто объявить свой nums
вне функции обратного вызова слушателя. Примерно так:
...
var sums = [];
rl.on('line', (line) => {
let newNumbers = line.split(' '); // [4, 2]
sums.concat(newNumbers);
});
...
Возможно, вы захотите понять , как передатчик событий и слушатель событий работают в JavaScript.
Я думаю, что для вас нет ничего даже вы регистрируете прослушиватель событий 'error'
, потому что все работает, как ожидалось. И я считаю, что должно быть событие типа 'end'
или 'closed'
, которое будет отправлено после того, как rl
прочитает все содержимое ввода, и вы можете console.log
свой массив sums
, я думаю, вы можете получить свой ожидаемый результат.
Не следует обрабатывать массив sums
сразу после закрывающих скобок, JavaScript является асинхронным, поэтому эти коды будут выполняться до того, как будут прочитаны все строки. Если есть метод, такой как rl.close
, вы должны вызывать его в такой ситуации:
rl.on('line', (line) => {
...
if (line === undefined) { // or any terminal character which createInterface would return.
rl.close();
}
});
И я считаю, что rl.close()
будет генерировать событие, как я говорил выше, что-то вроде 'end'
или 'closed'
, поместите код для обработки окончательного sums
там.