Ich habe Probleme, Fehler von einer Funktion zu berichten, wo ich eine Datei lesen und es über CSV-Parse leiten. Was ich tun möchte, ist, wenn es eine Zeile gibt, die nicht drei Felder hat, möchte ich einen Fehler zurückmelden - zu einem async.series-Aufruf. Diese erste Implementierung nicht alsFehler bei der Verwendung von Async mit Streams melden node.js
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");
});
}
Daraus ergibt sich eine Ausnahme: Wenn wir mehrere problematische Zeilen in der CSV-Datei haben: [Fehler Rückruf wurde bereits genannt.].
eine Rückkehr vor dem getan
return done(new Error('Error reading csv file'), "CSV Parse error");
ist auch keine Hilfe hinzufügen, da wir nicht von der übergeordneten Funktion beenden und zurückkehren kann - insertCsvIntoObject.
Darüber hinaus wird das Ereignis .on ('end', ..) nie ausgelöst, wenn es Fehlerereignisse gibt.
Wie kann man Fehler in einer solchen Situation korrekt melden?
Fair. Ich endete mit Relax_column_count – saraf
Fair. Ich habe festgestellt, dass das Ausgeben eines Fehlers nicht der beste Weg ist, Fehler auf Async zurückzugeben - da der Prozess abbricht, ohne dass die gesamte Datei gelesen wird. Am Ende benutze ich relax_column_count, um csv-parse bis zum Ende durchzulesen (da ich vielleicht mehr Checks habe, um sicherzustellen, dass die Felder in einer Zeile gültig sind - und ich vielleicht Datensätze mit Bedacht löschen möchte, statt den gesamten Prozess anzuhalten) sammelte alle Fehler und schickte sie zurück über den Callback zu async in .on ('end', ...) Danke für den Tipp über einmal (fertig) :-) – saraf