Node.js NodeJS-将CSV文件读取到数组返回[]
我尝试使用承诺的csv模块()将csv文件的行读取到字符串数组中,以进行单元测试:Node.js NodeJS-将CSV文件读取到数组返回[],node.js,Node.js,我尝试使用承诺的csv模块()将csv文件的行读取到字符串数组中,以进行单元测试: const inputFile = '.\\test\\example_result.csv'; const CsvReader = require('promised-csv'); function readCSV(inputFile){ var reader = new CsvReader(); var output = []; reader.on('row', function (dat
const inputFile = '.\\test\\example_result.csv';
const CsvReader = require('promised-csv');
function readCSV(inputFile){
var reader = new CsvReader();
var output = [];
reader.on('row', function (data) {
//console.log(data);
output.push(data[0]);
});
reader.read(inputFile, output);
return output;
}
我想稍后在单元测试中调用这个函数
it("Should store the elements of the array", async () => {
var resultSet = readCSV(inputFile);
console.log(resultSet);
});
但是,resultSet生成一个空数组。我也愿意使用任何其他模块,只要我能得到一个字符串数组。根据文档,代码应该是这样的
const inputFile = './test/example_result.csv';
const CsvReader = require('promised-csv');
function readCSV(inputFile) {
return new Promise((resolve, reject) => {
var reader = new CsvReader();
var output = [];
reader.on('row', data => {
// data is an array of data. You should
// concatenate it to the data set to compile it.
output = output.concat(data);
});
reader.on('done', () => {
// output will be the compiled data set.
resolve(output);
});
reader.on('error', err => reject(err));
reader.read(inputFile);
});
}
it("Should store the elements of the array", async () => {
var resultSet = await readCSV(inputFile);
console.log(resultSet);
});
根据文档,代码应该是这样的
const inputFile = './test/example_result.csv';
const CsvReader = require('promised-csv');
function readCSV(inputFile) {
return new Promise((resolve, reject) => {
var reader = new CsvReader();
var output = [];
reader.on('row', data => {
// data is an array of data. You should
// concatenate it to the data set to compile it.
output = output.concat(data);
});
reader.on('done', () => {
// output will be the compiled data set.
resolve(output);
});
reader.on('error', err => reject(err));
reader.read(inputFile);
});
}
it("Should store the elements of the array", async () => {
var resultSet = await readCSV(inputFile);
console.log(resultSet);
});
readCSV()
返回承诺。有两种方法可以访问它在完成时返回的数据
async
和wait
var resultSet=await readCSV(inputFile)代码>
这将等待承诺解决后再返回值
详情如下:
使用Promise.prototype.then()
-这类似于async/await,但也可以与其他Promise和Promise.prototype.catch()链接。
要记住的最重要的一点是,传递给.then()
的函数在readCSV()
解析之前不会执行
readCSV().then((数据)=>{returndata}).catch((err)=>{console.log(err)})
更多信息:readCSV()
返回承诺。有两种方法可以访问它在完成时返回的数据
正如罗兰·斯塔克所建议的,使用async
和wait
var resultSet=await readCSV(inputFile)代码>
这将等待承诺解决后再返回值
详情如下:
使用Promise.prototype.then()
-这类似于async/await,但也可以与其他Promise和Promise.prototype.catch()链接。
要记住的最重要的一点是,传递给.then()
的函数在readCSV()
解析之前不会执行
readCSV().then((数据)=>{returndata}).catch((err)=>{console.log(err)})
更多信息:我从文档中假设是这样,但我没有测试它,所以我不能确定。我将自己测试代码并很快更新。根据我对示例.csv
文件的测试,仅使用CsvReader.prototype.read()
,不会返回带有预期数据的承诺。您必须使用中定义的EventEmitter
接口,并用编译后的数据集返回您自己的承诺。进行了一些更新,以考虑数据在'row'
事件中的显示方式。我从文档中假设是这样,但我没有对其进行测试,因此我无法确定。我将自己测试代码并很快更新。根据我对示例.csv
文件的测试,仅使用CsvReader.prototype.read()
,不会返回带有预期数据的承诺。您必须使用中定义的EventEmitter
接口,并使用编译后的数据集返回您自己的承诺。进行了一些更新,以考虑数据在'row'
事件中的显示方式。