AngularJS承诺和局部变量

时间:2015-01-11 09:56:07

标签: javascript angularjs angular-promise

我正在向现有系统添加组件。大多数情况下,此组件将处理一个项目,但有一个请求支持多个项目。例如,可视化图表中的某个项目,如果选择了多个项目,则所有项目都将包含在同一图表中。

他们有服务来获取特定项目,或所有项目,但不是选择性项目。

我有类似的东西



        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;
&#13;
&#13;

有没有办法使用承诺来做到这一点?或者必须通过封闭来解决它?

1 个答案:

答案 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 };
    };
});