Me gustaría recuperar una matriz de mi colección mongodb y, antes de devolverla al cliente, trabajar con ella. Mi resultado deseado sería el siguiente:
Mi código actual se ve así:
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 });
Por el momento, el trabajo que quiero hacer con la matriz recuperada ocurre después de res.success()
, por lo que en el cliente obtendré la matriz original. ¿Por qué es así?
Puede usar Promise.all
junto con 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 }) )) )