当我用函数返回时,我的arr是空的

时间:2017-09-01 06:49:33

标签: javascript node.js promise

我试图在我的回报中传递arrEntree,但它是在一个承诺内。我该如何解决这个问题?函数查询包含一个新的承诺,但每次ArrEntree打印为空时,因为它在promise完成处理之前被调用。我怎么会完成承诺然后才叫我回来......?我该如何解决这个问题。

function query(statement, params, first) {
  return new Promise(function(resolve, reject) {
    connection.query(statement, (params || []), function(err, rows) {
      if (err) {
        console.log("err", err);
        if (err.code === "ETIMEDOUT") {
          connectToDb();
          return query(statement, params, first);
        }
        reject(err);
      } else {
        if (first) {
          resolve(rows[0]);
        } else {
          resolve(rows);
        }
      }
    });
  });
}





function sendPlanEmails(){
      if (plans.length === 0) {
        return true;
      }

      const orders = plans.map(plan=>{
        const arrEntree = []
        const planData = srcData.plans[plan.productId];
        const entrees = plan.entrees;
        const entreeID = Object.keys(plan.entrees);
        query('select * from entrees where entree_id in (' + entreeID.join(',') + ')')
          .then(function(results){
            results.forEach(function(element){
              entreeID.forEach(function(second_elem){
                if(element.entree_id==second_elem){
                  console.log('worked until here')
                  const quantity = plan.entrees[second_elem];
                  const name = element.entree;
                  arrEntree.push({name:name, quantity:quantity});
                }
              })

            })

          })

        return {
          days:plan.days.days,
          planDataTitle:planData.title,
          breakfast:plan.meals[0],
          lunch:plan.meals[1],
          dinner:plan.meals[2],
          entreeArry:arrEntree
        }; 
      });
      const template_mp = srcData.orderPage.mailchimp_template_mp || 'order_confirmation';
      return utils.sendMealPlanEmail(template_mp, {
          from: from,
          order: orders,
        });
    }

0 个答案:

没有答案