簡體   English   中英

如果一個承諾失敗,$ q.all()不調用失敗處理程序

[英]$q.all() not calling fail handler if one promise fails

只是想了解$q.all()工作原理:

在我的示例中,我使用$q.all()執行2個函數(都故意返回reject() ),我希望then()fail處理函數被調用,但事實並非如此,為什么會這樣呢?

碼:

var myApp = angular.module('myApp',[]);

function MyCtrl($scope,$q) {


    f1 = function(){
        return $q.defer().reject();
    }

    f2 = function(){
        return $q.defer().reject();
    }
    s = function(){alert('success!'); };
    f = function(){alert('failed!');};
    $q.all([f1(),f2()]).then(s,f);
}

小提琴:

http://jsfiddle.net/sajjansarkar/ADukg/10942/


編輯:

我發現如果使函數返回原始承諾並在拒絕之前引入延遲,則可以使用相同的代碼。

小提琴

應該:

   f2 = function(){
      var p = $q.defer();
      p.reject();
      return p.promise;
    }

要么

f2 = function() {
 return $q.reject()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM