我正在使用以下函数(为了模式检查而大量删除的代码)从网站集中获取某个SP.ListTemplateType的所有列表。由于MS AJAX不包含$ promise函数(据我所知),我创建的队列在调用时递增,并在调用返回时递减,成功或错误。
如果在第二次调用之前返回第一个调用,这似乎(可能)容易出错。到目前为止,即使在20次递归的情况下,第一次调用在最后一次调用之前也不会返回,因此队列SEEMS是安全的。
这是错的,还是我这样做了?
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)
});
答案 0 :(得分:2)
这似乎是正确的,除非在第一个Ajax请求返回错误时永远不会调用回调函数。
对errorHandler()的检查与对successHandler()的检查相同:
function errorHandler(sender, args) {
queue--;
if (queue == 0) {
callback(returnListArray);
}
}