Angularjs 如何执行递归循环?

Angularjs 如何执行递归循环?,angularjs,recursion,Angularjs,Recursion,我有以下代码从第三方API(位于example.com)获取数据: 现在它包含data.pagination.next中的分页 如果来自第三方的数据可能超过1页,我希望递归执行此操作以检查电子邮件id是否匹配,然后返回处于If条件的id,如果有一页,上述代码工作正常。您应该将检查代码与检索代码分开,并将后者封装在函数中。然后用一些if/else也可以做同样的事情 $scope.buttonClick = retrieveData; function retrieveData( pageId )

我有以下代码从第三方API(位于example.com)获取数据:

现在它包含
data.pagination.next中的分页


如果来自第三方的数据可能超过1页,我希望递归执行此操作以检查电子邮件id是否匹配,然后返回处于If条件的id,如果有一页,上述代码工作正常。

您应该将检查代码与检索代码分开,并将后者封装在函数中。然后用一些if/else也可以做同样的事情

$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 == "xxx@xxx.com") {
            return data.applicants[key];

        }
    }
    return false;
}

非常感谢giorgio的回答,但我得到了以下错误:“$http未定义”这实际上很奇怪,因为$http服务是一个核心的角度服务。您是否忘记在控制器中提供它,例如
angular.module('my.module').controller('MyController',['$http',function($http){//mycode}])?顺便说一句,这些函数应该是您控制器的成员,否则我们很可能确实无法使用。
$http
。哦,对不起,我忘记了:X这是我的错误,工作正常:)谢谢,伙计
$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 == "xxx@xxx.com") {
            return data.applicants[key];

        }
    }
    return false;
}