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.