以下代码从MONGODB获取数据
function getCategory(){
Category.find((err,categories)=>{
console.log(categories); //prints categories object
return categories;
})
}
function getPages(){
Page.find({}).sort({sorting:1}).exec((err,pages)=>{
console.log(pages); //prints pages object
return pages;
})
}
但是当我尝试获取其值时,它们返回的是未定义的,而不是返回类别和页面的对象
router.get('/',(req,res)=>{
console.log(getCategory()); //undefined
console.log(getPages()); //undefined
}
我尝试从getCategory()返回外部回调,但仍未定义
function getCategory(){
let t= {} ;
Category.find((err,categories)=>{
t= categories;
})
return t;
}
可以请人解释原因吗?
这可能是由于异步调用引起的,我不知道吗?谢谢
答案 0 :(得分:0)
确保将{}
添加到Category,并将回调函数添加到getter方法中
function getCategory(callback){
Category.find({}, (err,categories)=>{
console.log(categories); //prints categories object
callback(err, categories);
})
}
function getPages(callback){
Page.find({}, { sort: { sorting: 1 } }, (err,pages)=>{
console.log(pages); //prints pages object
callback(err, pages);
})
}
router.get('/',(req,res)=>{
getCategory((err, category) => {
console.log(category)
})
getPages((err, pages) => {
console.log(pages)
})
}
或作为诺言
function getCategory() {
return new Promise((resolve, reject) => {
Category.find({}, (err,categories)=>{
console.log(categories); //prints categories object
resolve(categories);
})
})
}
function getPages() {
return new Promise((resolve, reject) => {
Page.find({}, { sort: { sorting: 1 } }, (err, pages)=>{
console.log(pages);
resolve(pages);
})
})
}
router.get('/',(req,res)=>{
getCategory().then((category) => {
console.log(category)
}, (err) => {
console.log(err)
})
getPages().then((pages) => {
console.log(pages)
}, (err) => {
console.log(err)
})
})