3

我在 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

但它给出的输出为

未定义 11

4

1 回答 1

8

可能您的某些查询与任何内容都不匹配。这就是为什么它返回未定义的结果。但是还有另一个问题。异步回调中的i可能不是您所期望的。并且可能等于months.length。为了保持不变,应该使用类似的东西:

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++){
于 2013-09-18T06:21:02.530 回答