因此,我正在使用Express Locals创建自定义函数。我有这个:
Menu.getMenu(function(err, menu) {
app.locals.buildMenuStructure = function(){
var ids = [];
for (var i = 0; i < menu.length; i++) {
ids.push(menu[i]._id);
}
return ids;
};
});
但是问题是,当我向Menu集合中添加一些数据时,该函数不知道正在填充的菜单。要查看新的ID,我需要重新启动服务器。
现在我意识到我需要检索功能中的菜单buildMenuStructure
才能立即看到效果。在那种情况下,我需要获取getMenu
异步函数的值并返回它。像这样的东西:
app.locals.buildMenuStructure = function(){
var ids = [];
Menu.getMenu(function(err, menu) {
for (var i = 0; i < menu.length; i++) {
ids.push(menu[i]._id);
}
});
return ids;
}
我打算为此使用异步库,但是我无法使其工作((注意!此函数已简化。该函数Menu.getMenu
与猫鼬相同Menu.find({});
感谢您的回答。
看起来您想同步检索异步函数的值,但这是不可能的(除非您正在使用光纤)。
对您而言,最好的解决方案是保留原始代码,但将其移入快速中间件中并res.locals
代替使用app.locals
:
app.use(function(req, res, next) {
Menu.getMenu(function(err, menu) {
res.locals.buildMenuStructure = function(){
var ids = [];
for (var i = 0; i < menu.length; i++) {
ids.push(menu[i]._id);
}
return ids;
};
next(err);
});
})
在这种情况下,buildMenuStructure
将为每个新请求重新构建帮助程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句