首先,我是Java的新手,并且在脚本方面是我的爱好者。话虽这么说,我可能正在做一些非常菜鸟的事,这导致了这个问题。我正在使用Express和MongoDB构建NodeJS应用。我正在将ejs与Bootstrap 4模板一起用作我的视图引擎。这是我的问题:
routes.js用于快速路由。这是其中一条路线的示例:
router.get('/', function(req, res, next) {
var indexData = new Promise(function(resolve, reject){
updateIndexData((docs) => {
return resolve(docs);
});
});
indexData.then(function(values) {
res.render('index', {
data: values
});
});
});
简要说明一下,当用户将浏览器指向localhost:port时,.get函数将调用updateIndexData()函数,该函数使用Mongoose find()查询来收集必要的数据。然后,由于将其设置为Promise,一旦完成,它将数据传递到ejs视图,该视图在浏览器中显示数据。通过对服务器的API调用,每5分钟更新一次数据,因此我需要能够即时调用新数据。
我遇到的问题是:代码有效。它会完全按照我的需要显示数据...但是仅在刷新浏览器后才显示。初始加载时,视图将呈现,但数据完全丢失。好像在数据完成编译之前就已呈现视图,但是我对Promises的理解是这不应该发生。社区的任何帮助将不胜感激!
答案 0 :(得分:0)
您是正确的,res.render函数仅在promise分解时运行。但是,您是否检查了“ updateIndexData”函数的返回数据?如果updateIndexData函数返回一个空字符串或未定义...
,则您描述的行为很容易发生。