尝试在数组中的promise失败后运行函数

Bat*_*man 0 javascript promise angularjs angular-promise

我有一系列的承诺和一个我需要在承诺完成后调用的函数.但是,每当单个promise失败时,我的$ q.all(promise)将不会启动回调函数.

  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);
  }
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 5

.then()需要多个参数.第二个参数是一个函数引用,如果promise失败则调用它.您可以提供第二个参数,如

$q.all(itemPromise).then(sucessHandler, failHandler)`
Run Code Online (Sandbox Code Playgroud)

在Q promise库中,您可能还希望.allSettled()在所有承诺完成后获得通知,即使有些失败也是如此.如何细节的作品在这里.我使用提供的Bluebird promise库.settle().