I would like to retrieve an array from my mongodb collection, and before sending it back to the client, work with it. My desired outcome would be the following:
My current code looks like this:
db.collection("collection")
.find()
.toArray()
.then((arr) => {
arr.forEach(cur => {
db.collection("another-collection")
.count({key: cur.prop})
.then((retrieved) => {
cur.prop = retrieved; //The amount of count one live above
//This part runs later than the res.success below
})
.catch((err: any) => {
//Handle error
});
});
return arr;
})
.then(arr => {
res.success(arr);
})
.catch((err) => {
//Handle error
});
At the moment, the work I want to do with the retrieved array happens after res.success()
, so on the client I will get the original array.
Why is that so?
You can use Promise.all
along with Array#map
.
.then((arr) =>
Promise.all(arr.map(cur =>
db.collection("another-collection")
.count({
key: cur.prop
})
.then((retrieved) => {
cur.prop = retrieved;
return curr;
})
.catch((err: any) => {
//Handle error
})
))
)