NodeJS:异步结果顺序

时间:2016-01-20 15:19:12

标签: node.js asynchronous

我的目标是 1.提取唯一数据 2.计算每个数据

async.waterfall([function(callback){
    var q = mongoose.model('student').distinct('hobby');
    q.exec(function(err,rst){
        callback(null,rst);
    });
},
function(arg1,callback){
    var temp = new Array();
    async.map(arg1,function(val,callback1){
        var qq = mongoose.model('student').where('hobby').equals(val).count();
        qq.exec(function(err,rst){
            temp.push(rst);
        });
        callback1();
    },function(e,r){});
    callback(null,temp);
}], function(err,result){console.log("result:"+result);});

计算每个数据时出现问题..

它与原始数组的顺序不同。

1 个答案:

答案 0 :(得分:0)

代码中有几个问题。回调不在正确的位置。此外,应使用async.mapSeries()而不是async.map()来保持数组的原始顺序。以下是修订后的代码:

async.waterfall([
  function(callback){
    var q = mongoose.model('student').distinct('hobby');
    q.exec(function(err,rst){
      callback(null,rst); 
    });
  },
  function(arg1,callback){
    var temp = new Array();
    async.mapSeries(arg1,function(val,callback1){
      var qq = mongoose.model('student').where('hobby').equals(val).count();
      qq.exec(function(err,rst){
        temp.push(rst);
        callback1();  // call here instead of outside
      });
    },function(e,r){
      callback(null,temp);  // call here instead of outside
    });
  }
], function(err,result){
  console.log("result:"+result);
});