AngularJS承诺和局部变量

AngularJS promise and Local variables

本文关键字:局部变量 承诺 AngularJS      更新时间:2023-09-26

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

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

我有这样的东西

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

有没有办法使用承诺来做到这一点? 还是必须通过关闭来解决它?

我认为将所有

选定项目的调用加入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 };
    };
});