MongoDB和nodeJS中的问题-如何正确使用它?

时间:2019-11-06 16:33:06

标签: javascript node.js mongodb asynchronous promise

我刚开始使用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);
    });
  });
}

谢谢。

0 个答案:

没有答案