我如何使用递归函数获取分页的json数据

问题描述 投票:0回答:1

我需要一些帮助,将下面的函数转换为递归函数。它应该自行调用,直到不再存在特定的http标头为止,然后执行最后两个函数fncParse()fncDrawTbl。我收到错误recfnc is not a function

// use gitlab api to fetch json data
// must check response http headers to iterate over all pages
// recursively call the function while there is a 'rel="next"' link header

var filteredJsonData = [];
var parsedJsonData   = [];

recfnc = function() {
    var req = $.getJSON(url, function(jsondata) {
        var hdrlink, linknext, relnext;

        filteredJsonData.push(fncFilter(jsondata));

        try {
            hdrlink  = req.getResponseHeader('link').split(',');
            relnext  = hdrlink.filter(l => l.toLowerCase().indexOf('rel="next"') > -1);
            linknext = relnext[0].split('<')[1].split('>')[0];
        }
        catch (e) { console.log(e); }

        if (linknext) {
            recfnc(linknext);
        }
        else {
            parsedJsonData.push(fncParse(filteredJsonData));
            fncDrawTbl(['Name', 'Issues', 'Hours'], parsedJsonData, '#contentKPI');
        }
    });
}(url);
javascript gitlab tampermonkey userscripts
1个回答
1
投票

[假设recfnc =只是您的问题中的错误,而不是原始代码中的错误(应该为const recfnc=),您的函数无法正常工作的原因] >>

您实际存储在recfnc变量中的内容是函数调用fn(){}(url)的结果,而不是函数本身的结果。就您而言,recfnc变量实际上保存着undefined值。

更改此:

recfnc = function(){}

// to:

(function recfnc(){}(url))
    
© www.soinside.com 2019 - 2024. All rights reserved.