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

Trying to understand how to incorporate a callback into Node.js/SQLITE

本文关键字:Node js SQLITE 合并 回调 了解      更新时间:2023-09-26

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

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和表达传递sqlite数据到我的视图之一

任何帮助将是最感激的,谢谢!

管理异步控制流的模块(如async)可以帮助您实现这一点。如果你需要异步的介绍,这里有一篇博客文章,你可能会觉得有用。

例如:

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将更适合您在示例中进行的查询,因为每个结果中只有一行。