gpt4 book ai didi

javascript - 等待递归函数完成

转载 作者:行者123 更新时间:2023-11-30 15:32:17 26 4
gpt4 key购买 nike

我有一个递归 Javascript 函数,它从一个维基百科页面获取链接,跟随它们,然后获取所有这些链接(重复指定次数)。

它调用自己未知次数来构造一个已知深度的对象。完成后,我想输出对象。目前该对象立即输出,并且为空,这意味着该函数显然不会等待所有递归调用完成。

如您所见,我曾尝试使用回调,但我假设不正确。我做错了什么,我应该怎么做?我假设还有其他一些我还没有发现的错误;我对 Javascript 比较陌生。

$(document).ready(function ()
{
pageLinks[START_PAGE] = {};
//Get initial pages
links = getLinks(START_PAGE, 0, printLinks));
});

function printLinks()
{
console.log(links);
}

function getLinks(currentPage, level, callback)
{
visitedPages.push(currentPage)
var pageLinks = {}
var data = $.getJSON(URL_BEGIN + currentPage + URL_END, function(data)
{
var pages = data.query.pages;
for(var page in pages)
{
pageContentObj = pages[page].revisions[0];
for(var key in pageContentObj) if(pageContentObj[key].length > 100)
{
var pageContent = pageContentObj[key];
//Get links
hyperlinks = getFromBetween.get(pageContent,"[[","]]");
for(var link in hyperlinks)
{
link = hyperlinks[link].split("|")[0]; //Remove friendly name
link = link.replaceAll(" ", "%20");

//Add to pagelist object
prefix = link.split(":")[0];
if(prefix != "Category" && prefix != "File" && prefix != "wikipedia")
if(level < ITERATIONS && !visitedPages.includes(arguments, link))
{
console.log(level + ": " + link)
pageLinks[link] = getLinks(link, level+1, callback); //===Recursive call===
}
}
}
}
});
if(level == 0 && callback) callback();
return pageLinks;
}

感谢任何帮助,提前致谢。

**编辑:**链接:https://github.com/JakeStanger/Wikipedia-Mapper/blob/master/init.js#L53

最佳答案

递归调用需要这样:

var counter = 0;
//the big for loop
counter++;
getLinks(link, level + 1, function(res) {
for (var key in res) { //with an array it would be concat...
pageLinks[key] = res[key];
}
counter--;
if (counter == 0 && callback) callback(pageLinks); //callback if all callbacks called
});

同时删除这段奇怪的代码:

if(level == 0 && callback) callback();

不,你可以这样做:

getLinks(START_PAGE, 0, console.log);

关于javascript - 等待递归函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42054773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com