繁体   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