新增至stackoverflow/nodejs/mongo/promises/es6。我已經成功地創建了一些簡單的查詢和插入,使用承諾,但現在我已經對牆壁,所以想我會尋求一些幫助。nodejs mongodb es6-promise使用外鍵數據獲取列表
我想通過查找一個創建者(所有者)和(鍛鍊)名稱來檢索一個例程列表,以挑選出與例程相關的鍛鍊(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。我現在希望得到關於我的解決方案的建議。
嘗試使用'let'而不是'var'。 – jib
[JavaScript裏面的循環封閉 - 簡單實用的例子]可能的重複(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – jib
我不知道讓,我會放棄它。 我真的沒有看到任何可能的重複相關,但我沒有經驗,所以我知道什麼 - 但thanx您的意見。我試着將編輯框放在最上面,但解釋似乎並沒有出現在任何地方,所以寫在這裏 - 也是新的。 – nikrb