Node.js 使用异步库从异步函数获取返回值
所以,我使用expresslocals来创建自定义函数。我有这个:Node.js 使用异步库从异步函数获取返回值,node.js,asynchronous,express,Node.js,Asynchronous,Express,所以,我使用expresslocals来创建自定义函数。我有这个: 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
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.getMenu
函数与mongooseMenu.find({});
感谢您的回答。看起来您希望同步检索异步函数的值,但这是不可能的(除非您使用光纤) 最好的解决方案是保留原始代码,但将其移动到express中间件中,并使用
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);
});
})
app.use(函数(请求、恢复、下一步){
菜单。获取菜单(函数(错误,菜单){
res.locals.buildMenuStructure=function(){
var-id=[];
对于(变量i=0;i
在这种情况下,将为每个新请求重新构建buildMenuStructure
helper
.我没有res,req,因为它是app.locals函数。我在ejs模板中使用它。我想在没有请求的情况下在网站的任何地方使用它。我不明白为什么你不想使用
res.locals
而不是app.locals
。你的ejs
模板也可以使用它。唯一的区别是res。局部变量
的作用域是请求和应用程序。局部变量
而应用程序。局部变量
是整个应用程序的全局变量。我尝试了你的建议,但无效。这是错误-未定义buildMenuStructure。
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);
});
})