这听起来像是Q
or之类的库的一个非常典型的用例async
,但我真的不知道什么是最好的方法。
我想导入一个 150 行的 CSV 文件(使用node-csv
),并为每一行创建一个 mongo 文档。但是,流解析似乎比 'db inserts' 完成得更快,所以我遇到了回调被调用得太早的问题。
// importtest.mocha.js
[...]
importer.loadFromCsv (url, function(result) {
result.length.should.be.equal (150); // nope, it's always around 41
}
// importer.js
function loadFromCsv (url, callback){
csv().from.stream(url)
.on ('record', function(record, index){
new Row({data: record}).save(function() {
console.log ('saved a row to db');
});
})
.on ('end', function() {
callback (Row.find({})); // E parser finished, but probably not all Row.save()
});
}
那么,请任何人给我一个提示,我可以如何使用 async/promises 来解决这个问题,以便当流解析/数据库插入是异步的时,最终回调将仅在所有插入完成后完成?