在angularjs中的foreach循环内调用api

在angularjs中的foreach循环内调用api,angularjs,Angularjs,在我的工厂中,我有一个调用删除api的函数,如下所示: removeOffre: function(id) { return $http.delete('http://localhost:8080/removeOffre/'+id) .then(function(response) { return response; }, function(error) { retu

在我的工厂中,我有一个调用删除api的函数,如下所示:

removeOffre: function(id) {
        return $http.delete('http://localhost:8080/removeOffre/'+id)
            .then(function(response) {
                return response;
            }, function(error) {
                return 'There was an error getting data';
            });
    },
offresFactory.removeSelectedItems(entriesToDelete).then(function (state) {
      if(state == true) $state.go($state.current, {}, {reload: true});
    }, function (error) {
      console.log(error);
    });
这个功能有效

然后我想删除多个条目,因此我使用此函数:

removeSelectedItems: function(selectedItems) {
      let deleted = true;
      angular.forEach(selectedItems,function(id){
        $http.delete('http://localhost:8080/removeOffre/'+id)
          .then(function(response) {}, function() {
            deleted = false;
          });
      });
      return response;
    }
在服务器端,所有条目都被删除,但在我的浏览器控制台中,出现以下错误:

Error: response is not defined
factory.removeSelectedItems@http://localhost:9000/scripts/providers/offresFactory.js:60:7
deleteSelectedItems/$scope.ok@http://localhost:9000/scripts/controllers/offreController.js:135:5
anonymous/fn@http://localhost:9000/scripts/js/angular.min.js line 212 > Function:2:194
我从控制器调用此函数,如下所示:

removeOffre: function(id) {
        return $http.delete('http://localhost:8080/removeOffre/'+id)
            .then(function(response) {
                return response;
            }, function(error) {
                return 'There was an error getting data';
            });
    },
offresFactory.removeSelectedItems(entriesToDelete).then(function (state) {
      if(state == true) $state.go($state.current, {}, {reload: true});
    }, function (error) {
      console.log(error);
    });

如何解决此问题?

您正在删除多个项目,并获得这些项目的多个响应。您可以使用Angular的
$q.all
将通过
$http.delete
创建的结果承诺列表转换为结果列表承诺,然后返回

removeSelectedItems: function(selectedItems) {
    return $q.all(selectedItems.map(function(id) {
        return $http.delete('http://localhost:8080/removeOffre/' + id);
    })).then(
        function(responses) {
            return true; // all were successful 
        },
        function(error) {
            return false; // there was at least one error
        })
}

您尝试使用局部变量
deleted
将无法工作,因为您必须等待
$http.delete
创建的承诺兑现。

您正在删除多个项目,并获得这些项目的多个响应。您可以使用Angular的
$q.all
将通过
$http.delete
创建的结果承诺列表转换为结果列表承诺,然后返回

removeSelectedItems: function(selectedItems) {
    return $q.all(selectedItems.map(function(id) {
        return $http.delete('http://localhost:8080/removeOffre/' + id);
    })).then(
        function(responses) {
            return true; // all were successful 
        },
        function(error) {
            return false; // there was at least one error
        })
}

您尝试删除局部变量
将无效,因为您必须等待
$http.delete
创建的承诺兑现。

您在方法
removeselectedems
中返回
response
,但您从未定义名为
response
的变量。您正在返回
response
在方法
中删除selectedItems
,但您从未定义名为
response
的变量。