我正在 Node 中构建一个函数来查询我的mongoDB
数据库并将一些结果返回到一个对象中。我无法正确设置对象。这是我的代码:
调用 MongoDB 查找的函数
$scope.listItems = $resource('http://10.1.1.21\\:3000/api/uniques/:query');
var itemsToList = [
'designer',
'store',
'category'
]
$scope.uniqueLists = {};
for(var i = 0; i<itemsToList.length; i++){
$scope.uniqueLists[itemsToList[i]] = [];
$scope.listItems.get({query:itemsToList[i]}, function(data){
console.log(itemsToList); // Returns ["designer", "store", "Category"] x3
console.log(itemsToList[i]); // Returns undefined, undefined, undefined
console.log('i = ' + i); // Returns 3, 3, 3 (which is really odd, ideas?)
$scope.uniqueLists[i] = data.query;
});
}
此代码的问题在上面的评论中。奇怪的是,i == 3
对于所有 3 个循环,当它应该等于0
,时1
,然后在2
.
我的问题是
任何人都可以阐明这里发生了什么吗?它可能与 Node 的异步行为有关,但我在这里真的很茫然。
附加信息
我正在访问的ExpressJS
电话$scope.listItems
在这里,正如您所见express
,通过res
(ponse) 提供数据,据我所知,我无法通过这里i
或itemsToList
这里:
exports.uniqueEntries = function(req, res){
var query = req.params.query;
console.log(query);
db.products.distinct(query, function(err, results){
if (err) {
console.log("Lookup Error: " + err);
} else{
res.json({
query:results
});
}
});
}
也许问题在于,当expressJS
查找完成时,三个for
循环已经完成,并且i == 2
. 我不知道为什么控制台会记录它i ==3
,我也不知道如何阻止循环以确保在继续下一个for
循环之前完成查找。