我正在使用以下函数(为了模式检查而大量删除代码)从网站集中获取某个 SP.ListTemplateType 的所有列表。由于 MS AJAX 不包含 $promise 函数(据我所知),因此我正在创建一个队列,该队列随着调用的进行而递增,并随着调用的成功或错误返回而递减。
如果第一次调用在第二次调用之前返回,这似乎(可能)容易出错。到目前为止,即使在 20 多次递归的情况下,第一个调用直到最后一次调用才返回,因此队列似乎是安全的。
这是错的,还是我做对了?
function allListsOfType(type, callback) {
//setup context, etc...
var returnListArray = [];
var queue = 0;
getListsFromWeb(web);
function getListsFromWeb(targetWeb) {
//get lists from root web, and get all subwebs
context.load(objects);
queue++;
context.executeQueryAsync(
Function.createDelegate(this, function () { successHandler(); }),
Function.createDelegate(this, errorHandler)
);
}
function successHandler() {
//add list results to array
//loop through subwebs and call getListsFromWeb()
queue--;
if (queue == 0) {
callback(returnListArray);
}
}
function errorHandler(sender, args) {
queue--;
}
};
allListsOfType(SP.ListTemplateType.announcements, function(arr){
alert(arr.length)
});