【发布时间】:2016-08-23 14:26:46
【问题描述】:
我在node.js 中创建了一个使用 mongoDB 的代码。一切正常,但是当我使用嵌套循环时,它会中断并且不会返回正确的值。
DB1.find({},function(error,fetchAllDB1) {
var mainArray = new Array();
for (var i in fetchAllDB1) {
if(fetchAllDB1[i].name) {
var array1 = new Array();
var array2 = new Array();
array1['name'] = fetchAllDB1[i].name;
array1['logo'] = fetchAllDB1[i].logo;
array1['desc'] = fetchAllDB1[i].desc;
DB2.find({is_featured:'1', brand_id: fetchAllDB1[i]._id}, function(error,fetchDB2) {
for (var p in fetchDB2) {
var pArr=[];
pArr['_id'] = fetchDB2[p]._id;
pArr['name'] = fetchDB2[p].name;
pArr['sku'] = fetchDB2[p].sku;
pArr['description'] = fetchDB2[p].description;
console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
console.log(pArr);
console.log('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<');
array2[p]=pArr;
}
array1['pp']= array2;
});
mainArray[i]=array1;
}
}
console.log('######### LAST #########');
console.log(mainArray);
console.log('######### LAST #########');
});
在我的控制台消息中显示
console.log('######### LAST #########');
All Values
console.log('######### LAST #########');
之后
console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
All Values;
console.log('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<');
我想在我的代码中使用异步,以便所有数据获取如下:
mainarray =
[
[array1] = All Values
[array2] = [0]
[1]
]
mainarray =
[
[array1] = All Values
[array2] = [0]
[1]
]
【问题讨论】:
-
您的代码是如何工作的?我的意思是
for (var i in fetchAllDB1)i应该是一个对象,但你将它用作整数? -
添加到@Stan 的评论中,DB2 是什么?集合还是实际的数据库?如果是数据库,你在查询什么?我在文档中没有看到 db 有 find 方法...
-
不管怎样,你要找的是这个库,在那里你可以在循环中进行异步操作。 caolan.github.io/async
-
不要使用异步(建议)。改用承诺。您的代码将更加清晰且易于调试。确实,如果您以前没有使用过 Promise,那么处理它需要一些努力,但可能不会比修复和维护基于异步的方法所需的多。
标签: arrays node.js mongodb asynchronous