【发布时间】:2012-12-18 15:10:58
【问题描述】:
我有一个网络应用程序,它在 CMS 中抓取网站并查找特定类型的数据。
它的工作原理很像递归文件/目录循环:
//pseudo code
var rootWeb = context.site.rootWeb();
var objectThatHoldsAllResults;
recursiveSiteSearch(rootWeb);
function recursiveSiteSearch(webSite) {
//Get all content of a certain type and add to objectThatHoldsAllResults
//Get all SubSites and throw them into a loop that runs recursiveSiteSearch
}
此应用程序存在于云中,不知道每个访问它的 CMS 中有多少子站点。
每次循环获取某种类型的所有内容时,都会对网站进行 AJAX 调用。
我需要知道递归何时完成,但不知道该怎么做。
【问题讨论】:
-
嗨,韦斯利,我有点困惑。为什么你不能在
recursiveSiteSearch(rootWeb)之后添加一行新代码,它可以对结果做任何你需要的事情。该行将在 recursiveSiteSearch 执行完成后执行。也许我理解错了——如果是这样,请给我一些关于您的应用如何工作以及您希望如何处理结果的详细信息。 -
你如何使用承诺?请向我们展示一些实际代码。每个 Promise 库都有一个
all函数或用于捆绑 Promise 的东西。 -
@Jonah 是的,这是正确的,但是因为最后 (n) 个 AJAX 调用可能会在最后一次递归结束后完成,所以我可能会错过数据。
-
@Bergi 调用是由 CMS 发布的专有库进行的。我们所做的只是在我们想要从中提取类型数据的每个子站点上调用
context.executeQueryAsync()。 -
@Jonah AJAX 调用所有队列,甚至在一个返回之前。如果我在 resursiveSiteSearch 之后查询 objectThatHoldsAllResults.length,我得到 0。
标签: javascript ajax asynchronous promise