私はまだ Node.js の非同期フローについて理解を深めようとしています。db 内のファイルのリストを読み取り、結果を json 配列に変換して戻そうとしています。このコードは、1 つの json オブジェクトに対して正常に機能します。しかし、完全な配列を読み取っても出力はありません
これがコードです
関数呼び出し - ブラウザから ajax リクエストを受け取り、結果を送り返す
module.retrieveSourceContent(req, res, result, function(err, result){
if(err){
console.log(err);
return;
}
console.log(result);
res.contentType('json');
res.write(JSON.stringify(result));
res.end();
});
コード
retrieveSourceContent : function(req, res, sourceList, callback){
var sourceContent = new Array();
MongoClient.connect(config.mongoPath+config.dbName, function(err, db) {
if(err){
return callback(new Error("Unable to Connect to DB"));
}
var collection = db.collection(config.source);
for( i=0;i<sourceList['sources_FOR'].length;i++){
//build the source JSON Array
collection.find({'_id':sourceList['sources_FOR'][i]}).nextObject(function(err, doc) {
if(err)
return callback(new Error("Error finding data in DB"));
var sourceObject = {
title :doc.name,
tagCount :doc.tag.length,
tags :doc.tag,
format :doc.type, // Differentiate text, image, video and urls
content :doc.data // Content
};
sourceContent.push(sourceObject);
//if(i == sourceList['sources_FOR'].length - 1)
return callback(null, sourceContent);
});
}
});
}
このコードは、1 つの json オブジェクトをクライアントに返します。コメントを外すif(i == sourceList['sources_FOR'].length - 1)
と、出力もエラーもありません。しかしsourceContent.push(sourceObject);
、json配列を正常に作成します。
このフローは他の言語でも機能するため、ノードの非同期フローと関係があると思われます。これを解決する方法について、ここで途方に暮れています。
どんな助けでも素晴らしいでしょう..