试图了解如何将回调合并到Node.js / SQLITE中

时间:2016-08-12 01:22:43

标签: javascript node.js sqlite

我对这一切都很陌生,并且正在努力弄清楚如何控制节点代码中的操作顺序。当我加载页面时,我的变量会说“未定义”,直到我第二次刷新浏览器。我假设这是因为在db查询之前呈现了Jade / Pug页面。我读过的所有内容都表明我需要使用回调来控制订单,但我似乎无法让它工作。这是我的预先屠宰的代码。

exports.count = function(req, res) {

    //Get in count
    db.all("SELECT COUNT(id) as cnt FROM tableName WHERE status='in'",
      function(err, rows){
        inCount=rows[0].cnt;
        console.log("Items In: " + inCount);
    });

    //Get out count
    db.all("SELECT COUNT(id) as cnt FROM tableName WHERE status='out'",
      function(err, rows){
        outCount=rows[0].cnt;
        console.log("Items Out: " + outCount);
    });

    //Render Count to Pug view
    res.render('count', { _incount: inCount + ' in', _outcount: outCount + ' out'});

};

这是我试图遵循的,但它会导致我的页面超时。 node.js and express passing sqlite data to one of my views

非常感谢任何帮助,谢谢!!

1 个答案:

答案 0 :(得分:1)

用于管理异步控制流的模块(如async)可以帮助您解决此问题。如果您需要对异步的介绍,那么您可能会发现有用的博客文章here

例如:

exports.count = function(req, res) {

  async.series([
    function (callback) {

      //Get in count
      db.get("SELECT COUNT(id) as cnt FROM tableName WHERE status='in'", callback);
    },
    function (callback) {

      //Get out count
      db.get("SELECT COUNT(id) as cnt FROM tableName WHERE status='out'", callback);
    }
  ], function (error, results) {

    if (error) {
      // ... handle the error in an appropriate manner
    } else {
      res.render('count', { _incount: results[0].cnt + ' in', _outcount: results[1].cnt + ' out'});
    }
  }
};

此外,get更适合您在示例中进行的查询,因为每个结果中只会有一行。