Как я могу убедиться, что lineReader завершил работу и заполнил массив перед печатью массива после - PullRequest
0 голосов
/ 06 мая 2019

Этот код должен считывать файл построчно, захватывать необходимые данные и затем помещать их в массив timeStamps.В то время как он помещает данные в массив, он продолжает эту функцию и печатает пустой массив, прежде чем читатель строки сможет его заполнить.Я знаю, что он заполняет массив, потому что я могу добавить тайм-аут 5 секунд, а затем распечатывает весь массив.Как я могу реализовать асинхронную функцию и ждать чтения строки?

    const lineReader = require('readline').createInterface({
    input: require('fs').createReadStream('./data/test.json')
});

let timeStamps = [];

lineReader.on('line', (line) => {
    if (line.includes('timestampMs')) {
        timeStamps.push(line.toString().substring(21, 34))
        console.log(timeStamps) //prints array with each element added one by one
    }
});

console.log(timeStamps)//prints empty array

1 Ответ

2 голосов
/ 06 мая 2019

linereader выдает событие close после его завершения, поэтому это должно вывести правильные результаты:

lineReader.on('close', () => {
    console.log(timeStamps); //Print this when you finish reading test.json
});

Полный пример:

const lineReader = require('readline').createInterface({
  input: require('fs').createReadStream('./data/test.json')
});

let timeStamps = [];

lineReader.on('line', (line) => {
  if (line.includes('timestampMs')) {
    timeStamps.push(line.toString().substring(21, 34))
    console.log(timeStamps) //prints array with each element added one by one
  }
});

lineReader.on('close', () => {
  console.log(timeStamps)
})
...