私は解決策を見つけようと多くの努力をしており、最終的に私のデータが返されたときに約束を破ると信じています。繰り返し。AngularJS各ループのシーケンシャルチェーン約束
私は、各行をループし、 'menuType'と 'trackMenuIds'という配列を追加して、それをMongoDB呼び出しで検索条件に使用するvm.planWeek.dinnerを持っています。これはうまくいきますが、キー要素は、各ファクトリコールが返されたときです。返されたアイテムのIDを 'trackMenuIds'配列に追加します。これは、すでに返されている項目の配列を作成するため、次の呼び出しで無視することができます。つまり、$ ninを使用します。
vm.reviewWeek = function() {
//Array to be updated over each iteration and used in factory call
var trackMenuIds = [];
angular.forEach(vm.planWeek.dinner, function (day) {
//Adds two more items to day(current row) to pass to factory
day.menuType = 'dinner';
day.weekIds = trackMenuIds;
//Factory call - each time this runs, the 'trackMenuIds' array should have
//one more item added from the previous run
menuFactory.matchMenuCriteria(day)
.then(function (response) {
var randomItem = response.data[0];
day.menuItem = {'_id': randomItem._id, 'name': randomItem.name};
//adds the current id to the array to be used for the next run
trackMenuIds.push(randomItem._id);
});
});
};
'trackMenuIds'配列を現在の行に追加すると、どのIDでも更新されていません。私はそれをコンソール化すると、実際にはそれらを追加することができますが、約束の一部として信じています。更新された配列を各繰り返しでファクトリコールに渡すほど早く実行していません。
私はチェーンの約束などの手段を試しましたが、うまく動作しないようです。おそらくそれは私の未来の約束になるので、どんな助けでも大いに感謝されるでしょう。
[ループ内のJavaScriptクロージャー - 簡単な実用的な例]の複製が可能です(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Phil