У меня есть набор обещаний и функция, которую мне нужно вызвать после завершения обещаний. Однако, всякий раз, когда одно обещание выходит из строя, мой $ q.all (обещание) не будет запускать функцию обратного вызова.Попытка запустить функцию после сбоя обещания в массиве
function searchLibraries(library) {
//console.log(library);
console.log('inside searchlibraries');
var libraryCount = library.length;
for (var i = 0; i < libraryCount; i++) {
//console.log(i,library[i].siteUrl,library[i].listID,library[i].listName)
itemPromise[i] = $().SPServices({
operation: "GetListItems",
webURL: library[i].siteUrl,
listName: library[i].listID,
CAMLViewFields: cViewFieldsLimited,
CAMLQuery: cQueryAllCheckedOutDocuments,
CAMLQueryOptions: cQueryOptions,
cacheXML:true,
completefunc: function (xData,Status){
if($(xData).hasSPError()){
console.log("Error");
console.log("Error Code:" ,$(xData).getSPErrorCode());
console.log("Error Message:" ,$(xData).getSPErrorText());
}
}
})
}
return $q.all(itemPromise).then(parseSearchResult);
}
Добавьте счетчик, который увеличивается, когда каждое обещание будет завершено, независимо от того, произойдет ли он или не удастся. Каждый раз, когда вы увеличиваете счетчик, проверьте, равна ли его сумме общей суммы обещаний. Если это так, вызовите 'parseSearchResult' – Johan
См. Также [$ q.all - принимают только те, которые были разрешены] (http://stackoverflow.com/q/25296960/1048572) и те, которые связаны оттуда – Bergi