我在node.js中有以下代码。
var months = ['jan','feb','march','april','may','june','july','august','sep','oct','nov','dec']
for(var i=0; j=months.length,i<j; i++){
var start = scope.getCurrentUTS(new Date(2013, i, 1));
var end = scope.getCurrentUTS(new Date(2013, i, 31));
var query = {};
query["stamps.currentVisit"] = {
"$gte" : start.toString(),
"$lt" : end.toString()
};
//connect to mongo and gets count coll.find(query).count(); working fine
mongoDB.getCount(query,function(result) {
console.log(result,i);
});
}
问题:由于代码运行异步,最后一行代码没有按预期运行。
预期输出
10 0
11 1
12 2
.......
........
40 11
但是输出为
undefined 11
答案 0 :(得分:6)
您的某些查询可能与任何内容都不匹配。这就是它返回 undefined 的原因。但还有另一个问题。异步回调中的 i 可能与您的预期不符。并且可能等于 months.length 。要保持相同的 i ,您应该使用以下内容:
var months = ['jan','feb','march','april','may','june','july','august','sep','oct','nov','dec']
for(var i=0; j=months.length,i<j; i++){
(function(i) {
var start = scope.getCurrentUTS(new Date(2013, i, 1));
var end = scope.getCurrentUTS(new Date(2013, i, 31));
var query = {};
query["stamps.currentVisit"] = {
"$gte" : start.toString(),
"$lt" : end.toString()
};
//connect to mongo and gets count coll.find(query).count(); working fine
mongoDB.getCount(query,function(result) {
console.log(result,i);
});
})(i);
}
也是这个
for(var i=0; j=months.length,i<j; i++){
可能只是:
for(var i=0; i<months.length; i++){