2016-03-23 14 views
0

In meiner Fabrik Aufruf habe ich diese Funktion, die einen Lösch api wie folgt aufruft:eine api innerhalb einer foreach-Schleife in AngularJS

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

diese Funktion arbeitet.

und dann möchte ich mehrere Einträge löschen, damit ich diese Funktion dafür verwenden:

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

in der Server-Seite werden alle Einträge gelöscht werden, aber in meinem Browser-Konsole bekomme ich diesen Fehler:

Error: response is not defined 
[email protected]://localhost:9000/scripts/providers/offresFactory.js:60:7 
deleteSelectedItems/[email protected]://localhost:9000/scripts/controllers/offreController.js:135:5 
anonymous/[email protected]://localhost:9000/scripts/js/angular.min.js line 212 > Function:2:194 

ich nenne diese Funktion von meinem Controller, wie folgend:

offresFactory.removeSelectedItems(entriesToDelete).then(function (state) { 
     if(state == true) $state.go($state.current, {}, {reload: true}); 
    }, function (error) { 
     console.log(error); 
    }); 

wie kann ich lösen Dies ?

+0

Sie geben "response" in der Methode 'removeSelectedItems' zurück, aber Sie definieren niemals eine Variable namens' response'. – Igor

Antwort

2

Sie löschen mehrere Elemente und erhalten mehrere Antworten für diese. Sie können Angulars $q.all verwenden, um die Liste der Ergebnisversprechungen, die Sie durch $http.delete erstellen, in eine Ergebnislistenzusage umzuwandeln, die Sie dann zurückgeben können.

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

Ihr Versuch, mit den lokalen Variablen deleted wird nicht funktionieren, wie Sie für die Versprechungen von $http.delete erstellt warten müssen erfüllt werden.

Verwandte Themen