new to stackoverflow/nodejs/mongo/promises/es6。私はいくつかの簡単なクエリと挿入を約束して作成しましたが、今は壁にぶつかっているので、私はいくつかの助けを求めるだろうと考えました。nodejs mongodb es6 - 外部キーデータを含むフェッチリストを約束します。
私は、作成者(所有者)と(ワークアウト)の名前を参照してルーチンリストを取得して、関連する(1to1)ルーチンをワークアウトとして選択しようとしています。
私はここでアイデアを試してみたAren't promises just callbacks?とHow to chain and share prior results with Promisesですが、フラットチェーンのアイデアで動作するようにループを作成できないようです。
ので、擬似コードで
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
私の最初のアイデアは、私が現在働いているものに基づいて、私の限られた経験。
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]);
});
ここで編集をしてみてください - JavaScript closure inside loops – simple practical example - この質問は約束チェーンではなく、ループ内の閉鎖についてです。私は今私の解決策についての助言を期待しています。
「var」ではなく「let」を使用してください。 – jib
[ループ内のJavaScriptクロージャーの可能な複製 - 簡単な実用的な例](0120-18753) – jib
私はletのことを知らなかったが、私はそれを行ってあげるよ。 私は本当に重複の可能性については何の相関関係も見ませんが、経験はほとんどありませんので、私は何を知っていますか?私は編集ボックスを一番上にしようとしましたが、説明はどこにも現れていないようですので、ここに書きます。 – nikrb