1

我有一个 Web 应用程序,它在 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 调用。

我需要知道递归何时完成,但不知道该怎么做。

4

1 回答 1

2

直截了当,当执行到后面的语句时,递归将结束recursiveSiteSearch(rootWeb);

但是,可能/将(?)中的异步(ajax)recursiveSiteSearch意味着在那个时候仍然存在一些潜在的活动。

因此,您似乎需要一种机制来检测所有承诺(即在递归中启动的所有 ajax 请求)何时完成。

jQuery,提供了这样的机制。

伪代码:

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
    //Within the loop, push jqXHR objects onto the externally declared `promises` array.
}

var rootWeb = context.site.rootWeb();
var objectThatHoldsAllResults;
var promises = [];
recursiveSiteSearch(rootWeb);
jQuery.when.apply(jQuery, promises).done(function() {
    //statements here will execute when 
    //recursion has finished and all ajax 
    //requests have completed.
});

这应该起作用的原因是jqXHR 对象(由 jQuery.ajax() 及其简写形式返回)实现了 jQuery 的 Promise 接口。

于 2013-01-04T20:33:25.940 回答