mongoDB
データベースにクエリを実行し、いくつかの結果をオブジェクトに返す関数をNodeで構築しています。ただし、オブジェクトを正しくセットアップするのに問題があります。これが私のコードです:
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
呼び出しはここにあります。ご覧のとおり、(ponse) を介してデータが利用可能になります。私の知る限り、ここまたはここに渡すことはできません。$scope.listItems
express
res
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
ルックアップが終了するまでに、3 つのfor
ループが終了し、i == 2
. コンソールがそれをログに記録する理由がわかりません。i ==3
また、次のループに進む前にルックアップが確実に終了するようにループをブロックする方法もわかりませんfor
。