node.js + mongodb: дождаться завершения запроса - PullRequest
0 голосов
/ 05 июня 2018

У меня есть простой код в node.js

async function dbQuery() {
        const MongoClient = require('mongodb').MongoClient; 
        const url = "mongodb://localhost:27017/"; 
        const db = await MongoClient.connect(url);
        const dbo = db.db("mydb");
        const result = await dbo.collection("tblData").find({}).toArray()
        return result;
    }

async function doIt() {
        try {
              const res = await dbQuery();
              console.log("Records: " + res.length);
            } catch (error) {
              console.log(error);
            }
   }
//
console.log("Starting...")
doIt()
console.log("Done!")

, вывод:

Starting...
Done!
Records: 24

как заставить код ждать завершения запроса?иметь вывод вроде:

Starting...
Records: 24
Done!

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

В другом ответе говорится, что используйте Promises, но я не думаю, что это будет необходимо, вы используете async и await, более современную реализацию Promises.

Просто переместитеdoIt() вызов функции в асинхронный вызов.Поскольку это узел, а не блокировка, это будет более правильной реализацией.

async function dbQuery() {
    const MongoClient = require('mongodb').MongoClient; 
    const url = "mongodb://localhost:27017/"; 
    const db = await MongoClient.connect(url);
    const dbo = db.db("mydb");
    const result = await dbo.collection("tblData").find({}).toArray()
    return result;
}

async function doIt() {
    console.log("Starting...");
    try {
        const res = await dbQuery();
        console.log("Records: " + res.length);
    } catch (error) {
        console.log(error);
    }
    console.log("Done!");
}

doIt();
0 голосов
/ 05 июня 2018

Вы всегда можете использовать обещания, чтобы сделать работу.

async function doIt() {
  return new Promise((resolve, reject) => {
    try {
          const res = await dbQuery();
          console.log("Records: " + res.length);
          resolve();
        } catch (error) {
          reject(error);
        }
  });
}

console.log("Starting...")
doIt().then(() => {
   console.log("Done!");
})
.catch(err => console.log(err))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...