快速CSV流转换异步

时间:2016-01-15 15:14:03

标签: node.js mongodb csv

我正在尝试逐行读取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();});

1 个答案:

答案 0 :(得分:3)

转换期望next()函数进入下一行但你的代码仍然停留在 next 函数上。

尝试下面的修正,

if (!err && docs.length > 0) {
                ***perform your operation here***
                next();
            } else {
                next();
            }

PS - 很抱歉这么晚回复