我对这一切都很陌生,正在努力弄清楚如何控制 Node 代码中的操作顺序。当我加载页面时,我的变量显示“未定义”,直到我再次刷新浏览器。我假设这是因为 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
任何帮助将不胜感激,谢谢!!
最佳答案
用于管理异步控制流的模块 - 如 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
更适合您在示例中进行的查询,因为每个结果中只有一行。
关于javascript - 尝试了解如何将回调合并到 Node.js/SQLITE 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38908444/