JS在完成循环之前先经过forEach循环

时间:2019-07-02 12:33:45

标签: javascript asynchronous

我的控制器中有一些代码,在它的内部,我有一个forEach循环,其中有一个返回Promise的函数。兑现承诺后,我可以正确地记录它返回的数组。 问题是,即使控制器不异步,javascript也不会等待forEach循环完成,而且我不知道为什么... 我看了很多视频并阅读了这篇文章,但我猜没有点击。 预先感谢

--no-daemon -Dorg.gradle.debug=true

控制台应如下所示:1,[发票],2、3、4,[...所有发票], 相反,我得到:1、4,[],[发票],2、3

1 个答案:

答案 0 :(得分:3)

如果可行,您可以尝试以下方法:

exports.submitInv = (req, res) => {

  let status = {
    validated: [],
    repacked: []
  };

  // ...other code...

  console.log("1");
  status.validated.forEach(invoice => {

      const promises = [repackInvoice(invoice)];  
      Promise.all(promises)
      .then(temp => {
            temp.forEach(inv => {
                 status.repacked.push(inv);
            });
            return status;
      }).catch(err =>{
          console.log(err);
          throw new Error(err);
      })   
  });

  console.log("4");
  console.log(status.repacked);
};