MongoDB и обещания в nodeJS - Как правильно его использовать? - PullRequest
0 голосов
/ 06 ноября 2019

Я только что начал с NodeJ и имел дело с асинхронными функциями. Я попытался сделать несколько звонков MongoDB, и мне нужно дождаться завершения всех из них перед следующим шагом. Я всегда получаю ошибку, что мой сеанс закончился, и это сводит меня с ума. Может ли кто-нибудь помочь мне и сказать, какую ошибку я совершаю?

function getDoc(dbo){
  return new Promise((resolve, reject) => {
    dbo.listCollections().toArray(function(err, collInfos) {
      if (err){
        reject(err);
      } else {
        resolve(collInfos.map(function(obj) {
          return obj.name.toString();
        }));
      }
    });
  });
}

function findObj(dbo, name){
  return new Promise((resolve) => {
    dbo.collection(name).find({}).toArray(function(err, docs){
      if (err){
        console.log(err);
      } else {
        resolve({name: name, docs: docs});
      }
    });
  });
}

async function getObj(dbo, collNames){
  const promisses = [];
  collNames.map((name) =>{
    promisses.push(findObj(dbo, name));
  });
  return promisses;
}

async function getData(dbo){
  try {
    const arr = await getDoc(dbo);
    const promisses = await getObj(dbo, arr);
    Promise.all(promisses)
        .then((response) => {
          return (response);
        })
        .catch((error) => {
          throw (error);
        });
  } catch (e) {
    console.log(e);
    throw e;
  };
}

function getfromDB() {
  MongoClient.connect(url, {useNewUrlParser: true, useUnifiedTopology: true}, function(err, db) {
    if (err) throw err;
    const dbo = db.db('tradingview');
    getData(dbo).then((result) => {
      console.log(result);
      db.close();
    }).catch((err) => {
      console.log(err);
    });
  });
}

Заранее спасибо.

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