this is a throw away project just for practice manipulating data from mongoDb. I am trying to filter the existing elemnts from an array of id's:
// filter mongo data from array of id's
const ides = [
"61f20a5ea86d68cddaaf4207",
"61f82139abe2f2236f0b65c3",
"61f8213dabe2f2236f0b65c5",
"61f82140abe2f2236f0b65c7",
];
const getItems = async (items) => {
const getDataFromMongo = async (id) => {
const productDetails = {};
const product = await Product.findOne({ _id: id });
(productDetails._id = product._id),
(productDetails.name = product.name),
(productDetails.price = product.price),
(productDetails.description = product.description),
(productDetails.image = product.image),
(productDetails.category = product.category),
(productDetails.company = product.company),
(productDetails.colors = product.colors),
(productDetails.inventory = product.inventory),
(productDetails.averageRating = product.averageRating),
(productDetails.numOfReviews = product.numOfReviews),
(productDetails.user = product.user),
(productDetails.createdAt = product.createdAt),
(productDetails.updatedAt = product.updatedAt),
(productDetails.__v = product.__v),
(productDetails.id = product.id);
return productDetails;
};
const item = items.map(async (element) => await getDataFromMongo(element));
return item;
};
//============================================================================
endpoint looks like this:
exports.getAllProducts = async (req, res) => {
const product = await Product.find({}).populate("reviews");
const data = await getItems(ides);
console.log(data);
the outpot of the data log is :
[
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> }
]
res.status(StatusCodes.OK).json({ data: product, others: data });
I think i am missing an await somewhere and the promise does not get resolved, but i just can't figure out where ..
map runs synchronously returning the array of promises produced by the awaits. The function being mapped produces its own promises. Just resolve them with Promise.all...
const promises = items.map(getDataFromMongo);
return Promise.all(promises);