尝试了解如何将callback合并到Node.js / SQLITE中

我对这一切都很陌生,并且正在努力弄清楚如何控制节点代码中的操作顺序。 当我加载页面,我的variables说'未定义',直到我刷新浏览器第二次。 我假设这是因为Jade / Pug页面正在呈现在数据库查询之前。 我读过的所有东西都表明我需要使用callback来控制顺序,但是我似乎无法得到它的工作。 这是我的预先屠杀的代码。

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和expression传递的sqlite数据到我的意见之一

任何帮助将不胜感激,谢谢!

用于pipe理asynchronous控制stream的模块(如asynchronous )可以帮助您解决这个问题。 如果你需要一个asynchronous的介绍,这里有一个博客文章,你可能会觉得有用。

例如:

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