在 NodeJS 中读取 CSV
Reading from a CSV in NodeJS
问题
createReadStream
中的 push()
函数没有将我的数据推送到数组。
代码
let csv = require('csv-parser');
let people = [];
let final_array = [];
fs.createReadStream('people.csv')
.pipe(csv())
.on('data', (data) => {
people.push(data)
})
.on('end', () => {
console.log(people) //This prints out people fine
})
console.log(people) //This returns empty array
people.forEach((names) => {
console.log(people[names]); //absolutely no output
})
输出
[] //Output for console.log(people) outside the createReadStream
//Output for console.log people inside the createReadStream
[
{ username: 'rezero' },
{ username: 'software' },
{ username: 'planets' },
{ username: 'darkseid' },
{ username: 'gintama' },
{ username: 'websines' },
{ username: 'digital' }
]
期望的输出
我只希望数据中的用户名进入我的 final_array 以完成进一步的任务。
final_array = ['rezero','software','planets','darkseid','gintama','websines','digital']
csv-parsing 将 运行 异步,这意味着 console.log(people)
(以及之后的代码)将 运行 在文件被完全解析之前
你可以将解析包装成一个承诺并等待这个承诺(这仍然需要错误处理,但应该给你一个想法):
(async () => {
let peopleData = [];
await new Promise(resolve => {
fs.createReadStream('people.csv')
.pipe(csv())
.on('data', (data) => {
peopleData.push(data)
})
.on('end', () => {
resolve();
})
});
const finalArray = peopleData.map(data => data.username);
finalArray.forEach(name => {
console.log(name);
});
})();
问题
createReadStream
中的 push()
函数没有将我的数据推送到数组。
代码
let csv = require('csv-parser');
let people = [];
let final_array = [];
fs.createReadStream('people.csv')
.pipe(csv())
.on('data', (data) => {
people.push(data)
})
.on('end', () => {
console.log(people) //This prints out people fine
})
console.log(people) //This returns empty array
people.forEach((names) => {
console.log(people[names]); //absolutely no output
})
输出
[] //Output for console.log(people) outside the createReadStream
//Output for console.log people inside the createReadStream
[
{ username: 'rezero' },
{ username: 'software' },
{ username: 'planets' },
{ username: 'darkseid' },
{ username: 'gintama' },
{ username: 'websines' },
{ username: 'digital' }
]
期望的输出
我只希望数据中的用户名进入我的 final_array 以完成进一步的任务。
final_array = ['rezero','software','planets','darkseid','gintama','websines','digital']
csv-parsing 将 运行 异步,这意味着 console.log(people)
(以及之后的代码)将 运行 在文件被完全解析之前
你可以将解析包装成一个承诺并等待这个承诺(这仍然需要错误处理,但应该给你一个想法):
(async () => {
let peopleData = [];
await new Promise(resolve => {
fs.createReadStream('people.csv')
.pipe(csv())
.on('data', (data) => {
peopleData.push(data)
})
.on('end', () => {
resolve();
})
});
const finalArray = peopleData.map(data => data.username);
finalArray.forEach(name => {
console.log(name);
});
})();