与流Node.js异步使用时报告错误



我在尝试从读取文件并通过 csv-parse 管道传输的函数中报告错误时遇到问题。我想做的是,如果有一行没有三个字段,我想报告一个错误 - 到 async.series 调用。第一次实现失败,因为

function insertCsvIntoObject(done) {
    fs.createReadStream(inputCsvFilepath)
    .pipe(csvParser)
    .on('data', function (csvRow) {
        console.log('csv row:', csvRow);
        if (csvRow.length !== 3) {
            this.emit('error', "Does this go anywhere?");
        }
    })
    .on('end', function () {
         done(null, "Finished reading through the csv data");
     })
    .on('error', function (err) {
         console.log('errors is now:', csvReadErrors);
         done(new Error('Error reading csv file'), "CSV Parse error");
    });
}

这给出了一个异常:[错误:已调用回调。 如果我们在 csv 文件中有多个有问题的行。

在完成之前添加退货

return done(new Error('Error reading csv file'), "CSV Parse error");

也没有帮助,因为我们不能停止并从父函数 - insertCsvIntoObject 返回。

此外,如果有任何错误事件,.on('end',..) 事件永远不会被触发。

在这种情况下报告错误的正确方法是什么?

一行上的列数不一致时,看起来csv-parse已经发出错误。换句话说,您不必自己发出一个。

为了防止回调被多次调用,您可以使用打包的类似once

function insertCsvIntoObject(done) {
  done = once(done);
  ...
};

理想情况下,您应该能够在第一个错误后结束处理,但我无法阻止解析器解析其他记录(this.end()似乎不起作用,但也许我错过了一些东西)。

相关内容

  • 没有找到相关文章

最新更新