我正在尝试逐行读取csv,在mongodb中查找值并在将读取流回送到写入流之前转换读取流。我正在使用fast-csv库进行csv解析。
当调用下面的代码片段时,它会继续执行转换中的行console.log,然后挂起。即使我让进程超时,我也没有得到任何错误记录。
我缺少什么原理的异步流结构?
或者如何从此示例中获取一些错误信息?尝试/捕捉永远不会触发。
var db = mongojs("mongodb://127.0.0.1:27017/", ['collection']);
fs.createReadStream(path)
.pipe(csv.parse({headers: false}))
//pipe the parsed input into a csv formatter
.pipe(csv.format({headers: true}))
//Using the transform function from the formatting stream
.transform(function(row, next){
console.log(row);
db.collection.find({email: row[0].toString()}, function (err, docs) {
console.log(docs[0]);
console.log(err);
if (!err && docs.length > 0) {
next(void 0, {
email: docs[0].email,
name: docs[0].name
});
} else {
next(err)
}
});
})
.pipe(fs.createWriteStream("tmp/list.csv"))
.on("finish", function() {upload();});
答案 0 :(得分:3)
转换期望next()函数进入下一行但你的代码仍然停留在 next 函数上。
尝试下面的修正,
if (!err && docs.length > 0) {
***perform your operation here***
next();
} else {
next();
}
PS - 很抱歉这么晚回复