new to stackoverflow/nodejs/mongo/promises/es6. I have succesfully created some simple queries and inserts, using promises, but am now up against a wall, so thought I would ask for some help.
I am trying to retrieve a list of Routines with a lookup to a creator (owner) and a (workout) name to pick out a Workout, related (1to1) to Routine.
I've tried with ideas here Aren't promises just callbacks? and How to chain and share prior results with Promises but just can't seem to get a loop to work with the flat chaining idea.
So, in pseudo code
getRoutineList
foreach routine:
get user account using Routine.email
get workout for Routine, using user._id and Routine.workout_name
return the list of routines and workouts
My initial idea based on what I currently have working and my limited experience.
var rp = routines.find( {owner : user_id}).toArray().then( function( routine_list){
for( var i =0; i<routine_list.length; i++){
var routine = routine_list[i];
var ap = accounts.find( {email:routine.creator}).toArray().then( function( creator){
var workout_owner = creator[0];
var creator_id = workout_owner._id.toHexString(); // .toString();
var wp = workouts.find( { owner : creator_id, name : routine.ofWorkout})
.toArray().then( function( workout_list ){
return workout_list;
});
that.promises.push( wp);
console.log( "add workout promise count:", that.promises.length);
});
that.promises.push(ap);
console.log( "add account promise count:", that.promises.length);
}
return routine_list;
});
that.promises.push( rp);
console.log( "add routine promise count:", that.promises.length);
Promise.all( that.promises).then( function( promise_results){
console.log( "promises count:", that.promises.length);
console.log( "promises complete, data:", promise_results);
var data = {};
data["routines"] = promise_results[0];
var workouts = [];
for( var i = 1; i<promise_results.length; i++){
workouts.push( promise_results[i]);
}
data["workouts"] = workouts;
res.status(200).send( [promise_results]);
});
try an edit here - this question is about promise chaining, not closures within loops - JavaScript closure inside loops – simple practical example. I'm now hoping for advice about my solution.