Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS-将CSV文件读取到数组返回[]_Node.js - Fatal编程技术网

Node.js NodeJS-将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

我尝试使用承诺的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 (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'
    事件中的显示方式。