Функция Mongoose регистрирует правильные данные, но используя асинхронную функцию, возвращает неопределенные - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь запросить некоторые данные из базы данных и вернуть их функции.У меня проблема в том, что когда я регистрирую результаты запроса, он работает, но когда я пытаюсь узнать, что возвращает функция, я получаю неопределенное значение.Возможно, моя асинхронная функция с mongoose настроена неправильно.Или, может быть, у меня просто неверное представление о том, что происходит, поскольку я новичок в идее асинхронного программирования.

async function returnBlogThumbnails(filter = "recent", callback){
    console.log("returning blogs")
    //For now simply filter by most recent
        if(filter === "recent"){
            Blog.find({}).sort('-date').exec((err,docs) => {
                return docs;
            });
        }
}

и функция, которая вызывает эту функцию

app.get('/', (req, res)=> {
    console.log("go home");
    //Call out to query the database then use async function to return 
    database.returnBlogThumbnails().then((blogs) => {
        console.log(blogs);
        //res.render('home', blogs);
    });
});

Как я уже сказал, console.log выдает то, что я ищу.Однако функция, вызывающая функцию с запросом, всегда показывает undefined.Спасибо

1 Ответ

0 голосов
/ 09 июля 2019

Проблема в том, что вы определили свою функцию с помощью обратного вызова и пытаетесь вызвать ее как обещание.Ваша функция с обещанием должна быть:

async function returnBlogThumbnails(filter = "recent") {
    return new Promise((resolve, reject) => {     // creates a promise
        console.log("returning blogs")
        //For now simply filter by most recent
        if (filter === "recent") {
            Blog.find({}).sort('-date').exec((err, docs) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(docs)
                }
            });
        }
    });
}

, а затем в вашем маршруте вы можете назвать ее как:

app.get('/', (req, res) => {
    console.log("go home");
    //Call out to query the database then use async function to return 
    database.returnBlogThumbnails()
        .then((blogs) => {
            console.log(blogs);
            // do something with blogs
        })
        .catch((err) => {
            console.log(err);
            // handle error
        });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...