我仍在尝试了解 Node.js 中的异步流程。我试图读取 db 中的文件列表并将结果转换为 json 数组并返回。该代码适用于一个 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);
});
}
});
}
此代码将一个 json 对象返回给客户端。如果我取消注释if(i == sourceList['sources_FOR'].length - 1)
我没有输出也没有错误。但sourceContent.push(sourceObject);
确实成功创建了 json 数组。
由于此流程适用于其他语言,我怀疑它与节点的异步流程有关。我不知道如何解决这个问题。
任何帮助都会很棒..