简体   繁体   中英

Response doesn't return the data

I am creating order by saving the meal id, so I am using the Id of the meal to get the meal data from the meal table but the issue now, despite using async and await. it returns my response with an empty data cause the code is not waiting.

I don't want to use promises cause my code base uses async and await. I want to be consistent.

static async createOrders(meals, userId, catererId) {
  try {
    const newMeals = JSON.stringify(meals);
    const createdOrder = await Order.create({
      order: newMeals,
      total: 20180,
      caterer_id: 1,
      user_id: userId,
      delivery_status: 0,
    }, {
      raw: true
    });

    const {
      order
    } = createdOrder.dataValues;
    let newOrder = [];
    await order.forEach(async(ord) => {
      const mealId = Object.keys(ord)
      await Meal.findAll({
        where: {
          id: {
            [Op.or]: [...mealId]
          }
        },
        raw: true,
      })
      newOrder = [...res];
    })

    const response = {
      status: 'success',
      message: 'order created',
      data: newOrder,
    };
    return response;
  } catch (error) {
    const response = {
      message: error.message,
      err: true
    };
    throw response;
  }
}
}

Response

   {
    "status": "success",
    "createdOrder": {
        "status": "success",
        "message": "order created",
        "data": []
     }
   }

data should not be empty

async/await may not work as expected inside forEach loop. You should use for...of loop instead. Try this:

static async createOrders(meals, userId, catererId) {
  try {
    const newMeals = JSON.stringify(meals);
    const createdOrder = await Order.create({
      order: newMeals,
      total: 20180,
      caterer_id: 1,
      user_id: userId,
      delivery_status: 0,
    }, {
      raw: true
    });

    const {
      order
    } = createdOrder.dataValues;

    let newOrder = [];

    for(let ord of orrd) => {
      const mealId = Object.keys(ord)
      let res = await Meal.findAll({
        where: {
          id: {
            [Op.or]: [...mealId]
          }
        },
        raw: true,
      })
      newOrder = [...res];
    })

    const response = {
      status: 'success',
      message: 'order created',
      data: newOrder,
    };
    return response;
  } catch (error) {
    const response = {
      message: error.message,
      err: true
    };
    throw response;
  }
}

Let me know if it solves your problem

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM