JavaScript Node js函数的返回类型未定义?

时间:2018-08-19 02:28:17

标签: javascript node.js mongodb

以下代码从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;
}

可以请人解释原因吗?

这可能是由于异步调用引起的,我不知道吗?谢谢

1 个答案:

答案 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)
    })
})