Функция Asyn c не ждет и движется дальше - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь получить все документы из кластера MongoDB. Я искал в Интернете и использовал ключевые слова async / await и написал следующий код

//Database connection
const MongoClient = require('mongodb');
const uri = "mongodb+srv://user:password@cluster0-10soy.mongodb.net/test?retryWrites=true&w=majority";

async function GetQuestions() {
     MongoClient.connect(uri, async function (err, client) {
        const db = client.db("WhatSportWereYouMadeFor");
        return await db.collection("Questions").find().toArray();

    });
}

async function main(){
    let questions = await GetQuestions();
    console.log(questions);
}

main();

Из моего понимания шаблона асинхронности / ожидания есть строка console.log(questions), которая должна попадать только после возврата внутрь Удар GetQuestions, однако это не так.

1 Ответ

2 голосов
/ 28 марта 2020

Вы должны вернуть обещание с результатом Mon goose:

const MongoClient = require('mongodb');
const uri = "mongodb+srv://user:password@cluster0-10soy.mongodb.net/test?retryWrites=true&w=majority";

async function GetQuestions() {
     return new Promise((resolve, reject) => {
         MongoClient.connect(uri, function (err, client) {
             const db = client.db("WhatSportWereYouMadeFor");
             resolve(db.collection("Questions").find().toArray());
         });
     });
}

async function main(){
    let questions = await GetQuestions();
    console.log(questions);
}

main();
...