promise还是event?感觉我写的promise有问题,但是又说不出来
之前用event。我看了看本站的源码,用的也是这种基于事件观察的方法。感觉这种写法更容易理解。下面是我写的一段代码。
Cheatsheet.find({$or:[
{"title":{"$regex":q, "$options":"i"}},
{"description":{"$regex":q, "$options":"i"}}
]}, proxy.done('cheatsheets', function(cheatsheets){
return cheatsheets;
}));
User.find({$or: [
{"name":{"$regex":q, "$options":"i"}},
{"email":{"$regex":q, "$options":"i"}}
]}, proxy.done('users', function(users){
return users;
}));
proxy.all('cheatsheets','users', function(cheatsheets,users){
res.render('search',{
'cheatsheets': cheatsheets,
'users': users
})
})
后来又用promise重写了下,根据个人对promise的链式调用的理解,下面的查询过程(共查询两次)是首先进行第一次数据库查询,等第一次查询完成后,才能执行第二次查询。 这样会不会效率低啊,不是相当于同步么?我感觉是我的promise写的不地道。
var result = {}
var promise = Cheatsheet.find({$or:[{"title":{"$regex":q, "$options":"i"}}, {"description":{"$regex":q, "$options":"i"}}]}).exec();
promise.then(function(cheatsheets){
result.cheatsheets = cheatsheets
return User.find({$or: [{"name":{"$regex":q, "$options":"i"}},{"email":{"$regex":q, "$options":"i"}}]}).exec();
}).then(function(users){
result.users = users
res.render('search',result)
})