次の関数(パターン検査のためにコードを大幅に削除)を使用して、サイトコレクションから特定のSP.ListTemplateTypeのすべてのリストを取得しています。MSAJAXには(私の知る限り)$ promise関数が含まれていないため、呼び出しが行われるとインクリメントし、呼び出しが正常にまたはエラーで返されるとデクリメントするキューを作成しています。
2番目の呼び出しが行われる前に最初の呼び出しが返される場合、これは(おそらく)エラーが発生しやすいようです。これまでのところ、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)
});