如何执行递归循环?

时间:2016-09-02 07:29:19

标签: angularjs recursion

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

$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 == "xxx@example.org") {
                    console.log('found');
                    console.log(data.XXX[key].id);
            }
        }
    }).
    error(function (data, status, headers, config) {
        // log error
    });
}

现在它包含data.pagination.next

中的分页

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

1 个答案:

答案 0 :(得分:1)

您应该将检查代码与正在检索的代码分开,并将后者包装在函数中。然后用几个if / elses做几乎一样的。

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