簡體   English   中英

AngularJS拒絕的承諾沒有為$ q.all()調用onRejection

[英]AngularJS rejected promise is not calling onRejection for $q.all()

所以我有這段代碼:

        var deferred = $q.defer();
        var promises = [];

        angular.forEach($scope.devices, function(device){
            var promise = memberService.InsertDevice(memberId, device).then(function (data) {
                //device inserted
            }, function (rejectData) {
                if (rejectData.Error == "Cannot insert record since it already exists") {
                    alert("The number " + device.PhoneNumber + " already exists. Try with a different number.");
                }
            });

            promises.push(promise);
        });

        $q.all(promises).then(function (data) {
            //perform something on Success
        }, function (data) {
           //perform something on rejection
           //THIS NEVER GETS CALLED EVEN IF I GET THE ALERT FROM THE TOP
        });

看看最后的評論。 出於某種原因,即使我得到警報(這意味着其中一個呼叫出現問題),也永遠不會調用整體拒絕。

承諾為您提供了在失敗時“恢復”的機會,因此您必須在錯誤句柄中返回拒絕,以使$q.all知道它確實失敗了。 以下代碼中唯一的增量是return $q.reject(rejectData);

    var deferred = $q.defer();
    var promises = [];

    angular.forEach($scope.devices, function(device){
        var promise = memberService.InsertDevice(memberId, device).then(function (data) {
            //device inserted
        }, function (rejectData) {
            if (rejectData.Error == "Cannot insert record since it already exists") {
                alert("The number " + device.PhoneNumber + " already exists. Try with a different number.");
            }
               return $q.reject(rejectData);
        });

        promises.push(promise);
    });

    $q.all(promises).then(function (data) {
        //perform something on Success
    }, function (data) {
       //perform something on rejection
       //THIS NEVER GETS CALLED EVEN IF I GET THE ALERT FROM THE TOP
    });

暫無
暫無

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

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