app.get(’/test’,function(req, res){ category.getTen(function (err, posts) { res.render(‘test’, { //title: ‘分类管理’, posts: posts, user: req.session.user, success: req.flash(‘success’).toString(), error: req.flash(‘error’).toString() }); }) category.getCat(function (err, pers) { res.render(‘test’, { title: ‘分类管理’, pers: pers, user: req.session.user, success: req.flash(‘success’).toString(), error: req.flash(‘error’).toString() }); })
});
代码如上,两个方法分别加载两个集合的数据,如果单独写没问题,但两个写在一起,就碰到问题了,求解决指导。
你这种情况用async.parallel就行
Q也可以。
-
代码中无法 res.render 两次。根据你的代码,两个 res.render 随机一个执行,另一个无效。
-
应该先获取 ten 和 cat,等两样都获取时,再一起 render。
-
如果用串行思维,那么把下面那句 getCat 嵌套在 getTen 里面就好了。
-
如果并行,可以去试试 async 或者 eventproxy。我个人喜欢后者。
谢谢,我使用你说的async方法, app.get(’/test’,function(req, res){ category.getCat(function (err, results) { res.render(‘test’, { title: ‘分类管理’, pers: results.one, posts: results.two, user: req.session.user, success: req.flash(‘success’).toString(), error: req.flash(‘error’).toString() }); })
});
后面是这样的,
var date = {}; async.parallel({ one: function(callback) { setTimeout(function(){ PersonModel.find(function(err,persons){ console.log(“1”); //console.log(persons); callback(null, persons); }); },100); },
two: function(callback) { setTimeout(function(){ PostModel.find({“title”:“aa”},function(err,posts){ console.log(“2”); //console.log(posts); callback(null, posts); }); },200); } }, function(err,results){ //return results; //callback(null, results); //console.log(results); date = results; }) console.log(date); category.getCat = function(callback) { console.log(“2”+date); callback(null, date); }
如果你觉得我的代码有改进或者优化的地方,请不吝指出,谢谢
恩,你解释的很到位,你说的第二种方法我尝试过,但未能成功(而且这种方法应该不是很提倡吧)。第三种也试过,貌似也没成功。然后用了你指的第四种方法,成功了。谢谢指出