我试着想办法解决这个问题:
我有一个函数,它读取csv,将其保存到数组中,然后返回数组。我的问题是:在尝试返回数组之前,它总是返回一个空数组,因为filestream还没有完成。
const parser = require("csv-parser");
const fs = require("fs");
class CsvConverter {
constructor() {}
convert(filePath) {
console.log(this.getRawCsv(filePath));
[...]
}
getRawCsv(filePath) {
const results = [];
fs.createReadStream(filePath)
.pipe(parser())
.on("data", (data) => results.push(data));
// .on("end", () => {});
return results;
}
[...]
}
module.exports = CsvConverter;我已经尝试过使用.on("end", () => {});回调,但无法找到在回调函数中返回结果数组的方法。
使用承诺和异步/等待功能对我来说也没有用,但原因可能是我对这个功能太缺乏经验了。
谢谢你的帮助和可能的解决方案:)
你好,安德烈亚斯
发布于 2021-07-15 20:05:12
由于getRawCsv函数是异步的,所以转换函数将在createFileStream函数之前完成。您可以将流包装成一个承诺,然后等待它完成。我把你的例子缩略了一点。
const {createReadStream} = require('fs');
class CsvConverter {
constructor() {}
async convert(filePath) {
const raw = await this.getRawCsv(filePath)
console.log(raw)
}
getRawCsv(filePath) {
const results = [];
return new Promise((resolve, reject) => {
createReadStream(filePath, {encoding: 'utf8'})
.on('data', data => {
results.push(data)
})
.on('end', () => {
resolve(results);
})
.on('error', (err) => {
reject(err);
});
});
}
}https://stackoverflow.com/questions/68399311
复制相似问题