node菜鸡求大神教教我如何改这段代码!!!!蟹蟹 蟹蟹
发布于 6 年前 作者 Daxong 3305 次浏览 来自 问答

var data = [] for (var index = 0 ; index < catalogss.length ; index ++) { for (let i = 0 ; i < wordsArray.length ; i++ ){ Catalog.aggregate([ {$match: {“catalog”: catalogss[index],“books.vocabulary”: { $in:[wordsArray[i]] }}}, {"$project": { _id:"$catalog", size:{"$size":"$books.vocabulary"} }} ]).exec((err,docs) => { if (err){ console.err(err) } console.log(docs) data.push(docs[0]) }) } } 这段代码中,执行query的部分是异步的,我还不会用,希望可以得到帮助~~ 代码.png

8 回复

代码这么难看,不帮 先去学一下怎么用markdown吧

@zengming00 我更新了图片

用Promise.all

来自酷炫的 CNodeMD

async function test (catalogss, wordsArray) {
  var data = [];
  for (var index = 0; index < catalogss.length; index++) {
    for (let i = 0; i < wordsArray.length; i++) {
      const docs = await Catalog.aggregate([{
        $match: {
          'catalog': catalogss[index],
          'books.vocabulary': {
            $in: [wordsArray[i]]
          }
        }
      },
      {
        '$project': {
          _id: '$catalog',
          size: {
            '$size': '$books.vocabulary'
          }
        }
      }
      ]).exec();
      if (docs && docs.length) {
        data.push(docs[0]);
      }
    }
  }
  return data;
}
test(catalogss, wordsArray).then(data => {
  console.log(data)
});

类似这样子的,试试呢

@jiangli373 这样不并行,查询会慢

来自酷炫的 CNodeMD

把你的查询变成一个方法 然后用promise.all 就行了 这个的话就是并行执行你的查询 而且可以去到每一个查询的结果

谢谢各位的帮助,我解决了

来自酷炫的 CNodeMD

回到顶部