我对这一切都很陌生,并且正在努力弄清楚如何控制节点代码中的操作顺序。当我加载页面时,我的变量会说“未定义”,直到我第二次刷新浏览器。我假设这是因为在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
非常感谢任何帮助,谢谢!!
答案 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
更适合您在示例中进行的查询,因为每个结果中只会有一行。