在angularjs中的foreach循环内调用api
在我的工厂中,我有一个调用删除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
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
的变量。