1
我使用以下函數(爲了模式檢查而大量刪除代碼)從網站集合中獲取某個SP.ListTemplateType的所有列表。由於MS AJAX不包含$ promise函數(就我所知),我創建了一個隨着調用而增加的隊列,並且隨着調用被成功或錯誤地返回而遞減。返回遞歸AJAX調用結果的正確模式(Microsoft AJAX)
如果第一次調用在第二次調用之前返回,這似乎(可能)容易出錯。到目前爲止,即使在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)
});