gpt4 book ai didi

javascript - 如何从流中获取数据?

转载 作者:行者123 更新时间:2023-12-02 18:06:56 25 4
gpt4 key购买 nike

我本以为我得到了数组中的所有 CSV 数据,但由于某种原因我什么也没得到。

有人可以解释为什么 a 最后是空的吗?

const fs = require('fs');
const { parse } = require('csv-parse');

let a = [];

fs.createReadStream('./example.csv')
.pipe(parse({ delimiter: ';', from_line: 2 }))
.on('data', function (row) {
a.push(row);
})
.on('end', function () {
console.log('finished');
})
.on('error', function (error) {
console.log(error.message);
});

console.log(a);

最佳答案

你的 aundefined 因为代码是异步执行的。 on() 函数在您的 console.log(a) 执行后调用。

您可以在data 事件或end 事件中读取a 的值:

fs.createReadStream('./example.csv')
.pipe(parse({ delimiter: ';', from_line: 2 }))
.on('data', function (row) {
a.push(row);
console.log(a) // <------- here
})
.on('end', function () {
console.log('finished');
console.log(a) // <------- here
})
.on('error', function (error) {
console.log(error.message);
});

一个解决方案可能是使用 Promise

const readCSVData = async () => new Promise((resolve, reject) => {
let a = []
fs.createReadStream('./example.csv')
.pipe(parse({ delimiter: ';', from_line: 2 }))
.on('data', function (row) {
a.push(row);
})
.on('end', function () {
// return the a value
resolve(a)
})
.on('error', function (error) {
reject(error)
});
})

// .....

const foo = async () => {
const data = await readCSVData()
console.log(data)
}

// or
readCSVData().then(a => console.log(a))

关于javascript - 如何从流中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73050930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com