如何等待循环在找到 id 数组的 api 中完成?帆船

How to wait for a loop to finish within an api that finds an array of ids? SailsJs

我正在使用 find() 方法查看我的数据库中的 table,其中 return 是一条记录,其中有一列包含一些用户的 ID 数组。

我想遍历此 ID 并使用另一个 find() 方法来 return 用户详细信息。

据我所知,我必须使用 promise 来等待循环结束。但是,我不太确定如何在我的案例中使用承诺。

这是我迄今为止尝试过的方法,但我只得到两个控制台日志的空数组。

  getShortList : (req,res)=>{

    function shortList(ids){
      var companies = []

      for (var i = 0; i<ids.length; i++){
        await new Promise(resolve => {
          setTimeout(()=>{
            Company.find({id:ids[i]}).exec((err,company)=>{
              if (err) return res.serverError(err)

              companies.push(company)
            })
          },5000)
          resolve(companies)

        })

    }
  }
    async function testFunc(){

    var job_type = req.body.job_type
    var job_listing_id = req.body.job_listing_id

      Supplier_job_listing.find({id:job_listing_id}).exec((err,job)=>{
        if (err) return res.serverError(err)

        var list = shortList(job[0].shortlisted_bidders_ids)
        list.then((result)=>{
          console.log('receiving it here',result)
        })


      })

  }
  testFunc();

  }

我不知道你的完整代码,但对你的问题的响应是这样的:

async function shortList(ids){
  let promises = [];
  for (let i = 0; i<ids.length; i++){
    promises.push(Company.find({id:ids[i]}));
  }
  let companies = await Promise.all( promises);
  return companies;
}

function testFunc(){
  shortList()
   .then((companies) => {
     // do something with your companies
   })
   .catch(error){
     // console.log(error);
   }
}
testFunc();