I'm trying to read and modify some csv files. For one csv file, the code I wrote is the following:
const csv = require('csv-parser');
const fs = require('fs');
const results = [];
const resultsFiltered = [];
fs.createReadStream('csvTest/2005.csv')
.pipe(csv())
.on('data', (data) => results.push(data))
.on('end', () => {
// Filter results
for (i=0; i<results.length; i++) {
if (results[i]['Points:2'] == 0) {
resultsFiltered.push([results[i]['Points:0'], results[i]['Points:1'], results[i]['displacement:2']]);
}
}
console.log('results filtered: ', resultsFiltered);
});
This works fine, but when I try to loop over several files, I get strange results. Here is the code:
const csv = require('csv-parser');
const fs = require('fs');
const dataFolder = 'csvTest/';
let results, resultsFiltered, stringified;
function filterData(_file) {
results = [];
resultsFiltered = [];
console.log('filtering');
fs.createReadStream(dataFolder + _file)
.pipe(csv())
.on('data', (data) => results.push(data))
.on('end', () => {
// Filter results
for (i=0; i<results.length; i++) {
if (results[i]['Points:2'] == 0) {
resultsFiltered.push([results[i]['Points:0'], results[i]['Points:1'], results[i]['displacement:2']]);
}
}
console.log('done');
return resultsFiltered;
});
}
const filesList = fs.readdirSync(dataFolder);
function main() {
for (i=0; i<filesList.length; i++) {
console.log(filterData(filesList[i]));
}
}
main();
I understand that it could be solved with async/await but all the ways that I tried using it were unsuccessful. I always get in the console the same output as the basic code above:
filtering
undefined
filtering
undefined
filtering
undefined
done
done
done
instead of the desired
filtering
done
resultsFiltered
filtering
done
resultsFiltered
filtering
done
resultsFiltered
How should async/await be used in this case?