我正在向现有系统添加组件。大多数情况下,此组件将处理一个项目,但有一个请求支持多个项目。例如,可视化图表中的某个项目,如果选择了多个项目,则所有项目都将包含在同一图表中。
他们有服务来获取特定项目,或所有项目,但不是选择性项目。
我有类似的东西
for (var i = 0; i < $scope.items.length; i++) {
var item = $scope.items[i];
if (item.isSelected) {
$scope.selectedItems[item.name] = {
/* certain initial properties are set here */
nesteItems: []
};
thierService.getItem(item.id)
.then(function(data) {
// here I want to have access to item.name to reset the properties with correct values,
// for example:
$scope.selectedItems[item.name].nesteItems = data.nestedItems;
})
}
}
&#13;
有没有办法使用承诺来做到这一点?或者必须通过封闭来解决它?
答案 0 :(得分:0)
我认为将所有选定项目的thierService.getItem
调用加入一个承诺并处理结果非常方便。
var selectedItemsNames = [], promises = [];
for(var i = 0; i < $scope.items.length; i++) {
var item = $scope.items[i];
if(item.isSelected) {
selectedItemsNames.push(item.name);
promises.push(thierService.getItem(item.id));
}
}
$q.all(promises).then(function(data) {
for(i = 0; i < data.length; i++) {
$scope.selectedItems[selectedItemsNames[i]] = { nesteItems: data[i].nestedItems };
};
});