2016-09-02 10 views
-1

Ich habe den folgenden Code, der die Daten von einem Dritten API bekommt, die bei example.com ist:Wie führe ich eine rekursive Schleife durch?

$scope.buttonClick = function() { 
    $http.get('https://example.com'). 
     success(function (data, status, headers, config) { 
      console.log(data.pagination.next); 

      for (var key in data.applicants) { 
       if (data.applicants[key].email == "[email protected]") { 
        console.log('found'); 
        console.log(data.XXX[key].id); 
      } 
     } 
    }). 
    error(function (data, status, headers, config) { 
     // log error 
    }); 
} 

es Paginierung Jetzt enthält die data.pagination.next

in ist, wenn Daten, die kommt von Drittanbietern kann mehr als 1 Seite, ich möchte diese Operation rekursiv durchführen, um zu überprüfen, ob E-Mail-ID übereinstimmt, dann gibt es die ID, die in If-Bedingung ist, Über Code gut funktionieren, wenn es eine Seite gibt.

Antwort

1

Sie sollten den zu prüfenden Code vom abzurufenden Code trennen und ihn in eine Funktion einbinden. Dann mit ein paar If/els tun genau das gleiche.

$scope.buttonClick = retrieveData; 

function retrieveData(pageId) { 
    var params = { pageId: pageId || 1 }; 
    $http.get('https://zzz.com', params). 
     success(function (data, status, headers, config) { 
      var applicantFound = searchApplicantMail(data); 
      if(! applicantFound && data.pagination.next) { 
       return retrieveData(data.paginantion.nextPage); 
      } 
      doSomethingWith(applicantFound); 
     }). 
     error(function (data, status, headers, config) { 
      // log error 
     }); 
} 

function searchApplicantMail(data) { 
    for (var key in data.applicants) { 
     if (! data.applicants.hasOwnProperty(key)) { 
      continue; 
     } 
     if (data.applicants[key].email == "[email protected]") { 
      return data.applicants[key]; 

     } 
    } 
    return false; 
} 
+0

vielen Dank für die Antwort giorgio aber ich erhalte die folgenden Fehler: „$ http undefiniert“ –

+0

Das ist eigentlich ziemlich seltsam, wie 'die $ HTTP-Dienst ist ein Kern Angular service' ([doc] (https://docs.angularjs.org/api/ng/service/$http)). Haben Sie vergessen, es in Ihrem Controller zur Verfügung zu stellen, zB 'angular.module ('my.module'). Controller ('MyController', ['$ http', Funktion ($ http) {// mycode}]);' ? – giorgio

+0

BTW diese Funktionen sollten ein Mitglied Ihres Controllers sein, sonst wird "$ http" höchstwahrscheinlich nicht verfügbar sein. – giorgio

Verwandte Themen