Не можете получить доступ к данным, хранящимся в node.js ReadStream? - PullRequest
0 голосов
/ 13 января 2020

У меня есть node.js файл, читающий .csv через поток данных, например:

shldata = []

fs.createReadStream('./spreadsheets/shl.csv')
.pipe(csv({separator:';'}))
.on('data', (row) => {
    shldata.push(row);
})
.on('end',() => {
    console.log('CSV file successfully processed');
});

console.log(shldata);

Кстати, я не смог бы найти другой способ сделать это, если бы не поток чтения.

Если я утешаю данные в обещании ".on ('end')", это дает мне данные. Если я сделаю это позже, это даст мне ноль.

У меня такое ощущение, что поток ставится в очередь и читает только после регистрации переменной данных.

Я попытался добавить "return shldata" в обещание безрезультатно.

Также я пытаюсь удалить некоторые из столбцов CSV, которые мне не понадобятся. Я попытался добавить это для l oop в обещании:

for (i=0; i < shldata.length; i++){
    delete shldata[i]['key1'];
    delete shldata[i]['key2'];
    (...)
}

Это работает, но только если я повторяю эту строку для каждого заголовка столбца. Если я попытаюсь использовать массив ключей как этот, он не будет работать:

for (i=0; i < shldata.length; i++){
    delete shldata[i][keystoRemove];
}

Где массив "keystoRemove" установлен перед потоком. У меня возникло ощущение, что мне нужно как-то ввести этот массив в это обещание, иначе он его не прочтет.

Все это кажется излишне сложным. Я просто пытаюсь написать скрипт для чтения нескольких файлов, изменения их данных и отправки HTTP-сообщения в API.

1 Ответ

0 голосов
/ 13 января 2020

Вы можете получить доступ к shldata полностью внутри обработчика событий 'end'.

.on('end',() => {
    console.log('CSV file successfully processed');
    // at this point you have all the data.
}

Ваш текущий код пытается получить к нему доступ до того, как все данные будут обработаны и все события сработали. Если бы это была выделенная функция, вы могли бы return shldata; внутри этого обработчика событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...