Async.series()不按顺序工作

时间:2015-02-26 00:02:44

标签: node.js node-mongodb-native node-async

我是Node.js的新手请原谅我犯了一些错误。 我正在使用带有MongoDB的node.js来创建一个应用程序。

我已经在我的快递应用程序的modules文件夹中定义了DBUtils中的两个函数,一个自定义的DBUtils.find()和另一个DBUtils.getEventResults。

请参阅以下代码:

  var Date ="";
  var async = require("async");

  async.series([
  dbutils.find(mongourl + "/" +dbName, eventTableName, {"status":"A"}, {"date":1} , 1, function(err, result) {
    if (err) {
      res.render('evententries', { err:'No events to show!', hostname:req.headers.host });
    } else if (result.length <= 0) {
      res.render('home', {hostname:req.headers.host});
    } else {
      var entryTableName = config.get('entryTableName');
      dbutils.getTeamResults(mongourl + "/" +dbName, entryTableName, function(err, data) {
        if (err) {
          res.render('home', {hostname:req.headers.host, err:"Temporary Error"});
        } else {
          data.sort(function(a, b){return (parseInt(a.totalregs)+parseInt(a.totalwins)) < (parseInt(b.totalregs)+parseInt(b.totalwins));});
          //data.sort(sortResults);
            //data= results();
          //console.log('Last winner was : ', data[0]);
          console.log('Result was : ', data[0]);
          console.log('time : ', result[0].date);
          Date =result[0].date;
          console.log('time : ', Date);
          //res.render('home', {hostname:req.headers.host, nextEvent:result[0].date, teamresults:data});
        }
      });
    }
  }),
  dbutils.getEventResults(mongourl + "/" + dbName, entryTableName, function(err, data) {
    var Date = "";
    if (err) {
      res.render('home', {hostname:req.headers.host, err:"Temporary Error"});
    } else {
      //data.sort(function(a, b){return parseInt(a._id) < parseInt(b._id);});
      data.sort(sortResults);
      console.log('Result was : ', data[0]);
      console.log('Result was : ', data[1]);
      console.log('Result was : ', data[2]);



      console.log('DATE : ', Date);

      //res.render('events', {hostname:req.headers.host, eventresults:data});
      res.render('home', {hostname:req.headers.host, nextEvent:Date, teamresults:data});
    }
  }),


]);

  function sortResults(a, b) {
  var eventId1 = parseInt(a._id);
  var eventId2 = parseInt(b._id);
  var diff = eventId2-eventId1;

  if( diff > 0 ) {
    return 1;
  } else {
    return -1;
  }
}

我想要的是dbutils.find首先执行并设置 Date 变量,然后dbutils.getEventResults也执行并传递 Date 作为参数,同时渲染相应的玉模板。

但由于某种原因,首先执行dbutils.getEventResults,然后渲染页面,然后调用dbutils.find。

请告诉我方法或其他替代方法的漏洞,将find()中的Date参数集传递给getEventResults。

提前感谢您的帮助!

0 个答案:

没有答案