【发布时间】:2016-09-16 14:50:12
【问题描述】:
我在尝试从读取文件并通过 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',..) 事件永远不会被触发。
在这种情况下报告错误的正确方法是什么?
【问题讨论】:
标签: javascript node.js error-handling stream