我有一个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调用。
我需要知道递归何时完成,但不知道如何这样做。
答案 0 :(得分:2)
直截了当地,当执行到recursiveSiteSearch(rootWeb);
之后的语句时,递归将结束。
然而,recursiveSiteSearch
内的异步性(ajax)可能/意志(?)意味着某些潜在活动仍然存在。
因此,您似乎需要一种机制来检测所有承诺(即在递归中启动的所有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 objects(由jQuery.ajax()及其简写形式返回)实现了jQuery的Promise接口。