Q
やのようなライブラリのかなり典型的な使用例のようasync
に思えますが、それを行うための最良の方法が何であるかを実際に理解することはできませんでした.
node-csv
(を使用して) 150 行の 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でそれを修正する方法を教えてください。