2016-06-14 8 views
0

Ich verwende den Stecker ng-csv für mein eckiges Projekt. Ich bin ein Array durchlaufen und eine $http get aufrufen, die einige Informationen für meine CSV-Datei zurückgibt. Ich habe es derzeit für 1 Ergebnis funktioniert siehe unten.

var deferred = $q.defer(); 
$http({ 
    method: 'get', 
    url: "[endpoint]user/212121"             
}).success(function(data, status, headers, config) { 
    var ur = data; 
    deferred.resolve([{a:ur.accountId, b:ur.firstName, c:ur.email}]); 
    }) 
return deferred.promise; 

Dies wird die csv mit dem einen Datensatz auffüllen. Jedoch ich kämpfe, um es mit $q.all zur Arbeit zu bringen.

var queue=[];      
$scope.testing.forEach(function(userjson){ 
queue.push($http({ 
      method: 'get', 
      url: "[endpoint]"+userjson.userId            
     }).then(function(response) { 
      var ur = response.data; 
       $scope.output.push({a:ur.accountId, b:ur.firstName, c:ur.email}); 
      })); 
}) 

$q.all(queue).then(function(response) { 
    return $scope.output; 
}); 

return $q.defer(); 

Wenn ich queue debuggen ist es verheißungs Objekte voll, die die $http Daten halten. Ebenso enthält return $scope.output; alle Ergebnisse. ng-csv scheint es nicht zu interpretieren, ich fühle mich nahe dran.

Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Aktualisieren Sie dann Funktionen:

$http({ 
     method: 'get', 
     url: "[endpoint]"+userjson.userId            
    }).then(function(response) { 
     return {a:response.accountId, b:response.firstName, c:response.email}; 
     }) 

und:

$q.all(queue).then(function(response) { 
    return response; 
}); 

wird für jede Anforderung ein Array aller Antwort sein zurückzukehren.

Schreiben Sie defer wie folgt aus:

function getData() { 
var queue=[]; 
var defered = $q.defer(); 
$scope.testing.forEach(function(userjson){ 
    queue.push($http({ 
     method: 'get', 
     url: "[endpoint]"+userjson.userId            
    }).then(function(response) { 
     return {a:response.accountId, b:response.firstName, c:response.email}; 
     })); 
}) 

$q.all(queue).then(function(response) { 
    return defered.resolve(response); 
}); 
return defered.promise; 
} 

und verwenden Sie es mögen:

getData().then(function(data){ /*csv data is in data */ }) 
+0

Dank, dass im Sinne gearbeitet, die nun Reaktion mit den korrekten Daten gefüllt wird, so dass sehr viel für Das. Bei der Rückgabe $ q.defer(); es gibt den csv zurück, bevor es $ q.all erreicht. Weißt du, wie ich das beheben kann? – Antony

+1

Ich aktualisiere meine Antwort – Silvinus