【发布时间】:2020-07-11 08:19:07
【问题描述】:
我在异步编程的概念上有点挣扎,希望有人提供帮助/指导。 基本上,我正在开发一个连接到 mongodb 数据库的 node.js Web 服务器。 我正在使用 EJS 生成 HTML 文件,如下所示。
app.get("/", function(req, res){
res.render('home', {date: getData.todaysDate(), n: getData.todaysIncidents(), nTot: getData.totalIncidents()});
});
这些值中的大部分(“n”和“nTot”)是通过查询我的数据库然后执行一些其他操作获得的,如以下示例代码示例所示。
//------getData.js------//
exports.todaysIncidents = function() {
let server_n = 0;
Incident.find({dia: {$gt:y}}, function(err, result) {
if (err) {
console.log(err);
} else{
//do some stuff...
server_n = 12345
}
}
});
return server_n;
};
问题出在这里: HTML 文件中打印的值始终是用于变量初始化的值,例如变量“server_n”为 0。经过一番研究,我了解到这是因为 .find(...) 是一个异步函数,因此程序会立即执行指令“return server_n;”,这意味着在 HTML 文件上显示的值将为 0 和不是 12345。
我已经在 StackOverflow 中查看了其他问题,但我很难理解解决此问题的可能方法,我的意思是我不能是唯一一个遇到这个问题的人,对吧?
您能否提供一些关于如何解决此问题的基本解释?我仍在学习,其中很多概念仍然难以理解。
非常感谢。
【问题讨论】:
标签: javascript node.js mongodb asynchronous callback