javascript - 等到 Filestream 完成
问题描述
我试图弄清楚如何解决这个问题:
我有一个读取 csv 的函数,将其保存到数组中,然后返回数组。我的问题:在我尝试返回数组之前,它总是返回一个空数组,因为文件流还没有完成。
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", () => {});
回调,但我找不到在回调函数中返回结果数组的方法。
使用 Promises 和 async/await 功能对我也不起作用,但原因可能是我对这个功能太缺乏经验。
感谢您的帮助和可能的解决方案:)
亲切的问候,安德烈亚斯
解决方案
convert函数在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);
});
});
}
}
推荐阅读
- typescript - 试图让 jest 与 typescript 一起工作,得到描述,毕竟,expect 是未定义的
- javascript - 在 JavaScript 中从数组中选择随机元素会返回整个数组
- c# - 在数据库中存储时区指示符
- python - 从文本文件中获取一行的前 n 个字符?
- django - Django CBV:get_queryset() 和 get_context_data()?
- sql - Presto查询:在地图中查找具有最大值的键
- capacitor - Capacitor: Uncaught (in promise) PushNotifications 没有网络实现
- python - Groupby 用于集群生成
- gcc - CMAKE:如何防止 CMAKE 构建项目不依赖的库?
- algorithm - Foobar 将枪带入警卫战斗优化