完成Mongo写入后,节点csv调用挂起

我使用Node来加载CSV文件,然后将其写入MongoDB数据库。 这实际上是工作,但脚本不退出! 这是核心:

function commute_process(csvstr, col_commute) { csv() .from(csvstr, {columns: true}) .transform(function(row) { // unimportant stuff return row; }) .on('record', function(row) { cleanedrow = // unimportant console.log(cleanedrow); col_commute.insert(cleanedrow, {w:1}, function(err, result) { assert.equal(null, err); }); }) .on('end', function(count){ console.log('Number of lines: '+count); }); console.log("end of commute_process()") }; 

csvstr是一个很大的string。 col_commute是一个Mongo集合。 每行的日志输出正常。 end日志按预期发生(5000行)。 数据库具有正确的数据。 而…就是这样。 commute_process()的结束行不会发生。

为什么不?

这是因为mongo连接保持开放的可能性。 只需在结束事件内激发连接实例的close方法即可。 那么,如果还没有closuresrun process.exit()

解决scheme是添加一个callback来closuresMongo连接。 所以:

 commute_process(body, col_commute, function() {db.close();}); 

那么,在这个function中:

 .on('end', function(count){ console.log('Number of lines: '+count); cb(); });