2016-04-04 4 views
0

Ich bin ein Service-REST, und es hat derzeit 5025 Datensätze, aber wenn ich den Service nur 1.000 Datensätze verwenden. Was kann ich tun, um absolut alle Datensätze zu konsumieren?verbrauchen alle Datensätze einer angular.js Rest Petition

dies ist ein Beispiel für meinen Code:

$http({ 
    method: 'GET', 
    url: "www.exampleurl.com", //is a example, I can not post the real url. 
    timeout:5000 
    }).success(function(data){ 
    console.log(data) 
    }).error(function(response,status,headers,config) { 
    console.log("problem") 
    }); 
+0

Der Dienst hat wahrscheinlich eine Begrenzung für die Anzahl der Datensätze. Holen Sie sich die nächsten 1000 Tausend Datensätze mit etwas wie "url:" www.exampleurl.com?offset=1000 "'. Der genaue Name des Parameters hängt von der API des Dienstes ab. – georgeawg

+0

@georgeawg aber wie kann ich alle Datensätze verbrauchen? – yavg

+0

Holen Sie sie in 1000 Record Chunks und setzen Sie die Arrays zusammen mit 'Array.concat'. – georgeawg

Antwort

1

Gibt es Dokumente für diese API, die angeben, wie Clients Paginierung umgehen sollte? Normalerweise wird eine Art Paging-Token bereitgestellt. Angenommen, Sie können Anfragen in 1000er-Schritten tätigen, können Sie einen rekursiven Ansatz verwenden:

  var dataSet = []; 
     function getExampleData(skip){ 

     return new Promise(function(fulfill,reject){ 
      return $http.get('http://www.example.com?skip='+skip).then(function(res){ 
        return fulfill(res); 
      }); 
     }).then(function(res){ 
      if(res.data) //<--or whatever will indicate there were results and we know we need to keep going 
       { 
        return getExampleData(skip +1000); 
       } 
       //if there are no results (or whatever our stop criteria is) we return the full dataset 

       return dataSet; 

     }); 

    } 
//initial call into 
return getExampleData(0).then(function(results){ 
console.log(results); 
}); 
+0

Es sieht interessant aus, und ich danke Ihnen. aber ich verstehe das ist der Parameter "Rückruf" (getExampleData (Rückruf)). Ich möchte auch wissen, warum diese Funktion in einem Teil Ihres Codes nicht den Parameter (getExampleData()) hat und die Callback-Funktion() ist? Vielen Dank – yavg

+0

Die $ http Service '.success' und' .error' Methoden wurden [veraltet] (https://docs.angularjs.org/api/ng/service/$http#deprecation-notice). Bitte schreiben Sie keine Beispiele mit veralteten Methoden. Siehe auch [Warum sind Callbacks von Promise dann Methoden ein Anti-Pattern?] (Http://stackoverflow.com/questions/35660881/why-are-callbacks-from-promise-then-methods-an-anti-pattern). – georgeawg

+0

Ja, Entschuldigung, ich habe das schneller zusammengeschmuggelt als ich hätte. Yeas, Callback ist eine Funktion. Sie würden wie folgt aufrufen: getExampleData (function() { console.log ('complete!'); }); – scottjustin5000

Verwandte Themen