我想从MongoDB获取基于某些键的多个结果。
下面是我的代码:
router.get('/',function(req, res, next) {
var movie = movieModel.find({category:"movies"});
var sports = movieModel.find({category:"sports"});
var news = movieModel.find({category:"news"});
var cartoon = movieModel.find({category:"cartoons"});
var moviesData;
var sportsData;
var newsData;
var cartoonData;
movie.exec(function(err,data){
if(err) throw err;
console.log(data);
moviesData = data;
});
sports.exec(function(err,data){
if(err) throw err;
else {
sportsData = data;
}
})
news.exec(function(err,data){
if(err) throw err;
else {
newsData = data;
}
})
cartoon.exec(function(err,data){
if(err) throw err;
else{
cartoonData = data;
}
})
console.log(moviesData); // line 1
console.log(sportsData);// line 2
console.log(newsData);// line 3
console.log(cartoonData);// line 4
res.render('home', {admin:false,data:moviesData });
});
这里,当我在函数(name.exec())内部控制台数据时,它显示正确的输出,但当我在外部控制台(如第1行,第2行,第3行,第4行)时,它显示未定义。
使用exec()
和async
/await
的允诺形式来避免回调地狱(这在规范问题“如何从异步调用返回响应?”中有说明):
router.get("/", async function (req, res, next) {
var moviesData = await movieModel.find({ category: "movies" }).exec();
var sportsData = await movieModel.find({ category: "sports" }).exec();
var newsData = await movieModel.find({ category: "news" }).exec();
var cartoonData = await movieModel.find({ category: "cartoons" }).exec();
console.log(moviesData);
console.log(sportsData);
console.log(newsData);
console.log(cartoonData);
res.render("home", { admin: false, data: moviesData });
});