Javascript AngularJS$q.all,不管错误如何触发

Javascript AngularJS$q.all,不管错误如何触发,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,是否有一种方法可以触发$q.all,而不管承诺是否返回错误 我试图执行多个$http.post请求,从用户输入的文本字段中发布值。后端(Django REST framework)有一个我们实现的值检查器,因此如果所发布的值与预期值不同(即,在预期整数的位置提交字符串),将返回400状态,这反过来会导致$q.all未触发,这会在我的应用程序中导致许多不同的错误 //Beginning of for loop, getting values in text fields, setting //up

是否有一种方法可以触发$q.all,而不管承诺是否返回错误

我试图执行多个$http.post请求,从用户输入的文本字段中发布值。后端(Django REST framework)有一个我们实现的值检查器,因此如果所发布的值与预期值不同(即,在预期整数的位置提交字符串),将返回400状态,这反过来会导致$q.all未触发,这会在我的应用程序中导致许多不同的错误

//Beginning of for loop, getting values in text fields, setting
//up other things I'm not sure are really relevant here.

            var writeRes = $http({
                method: 'POST',
                url: '/' + api_prefix + '/values/',
                data: out_data, //defined elsewhere, not relevent here.
                headers: { 'Content-Type': 'application/json','X-CSRFToken': $scope.valueForm.csrf_token,'Accept': 'application/json;data=verbose' }  // set the headers so angular passing info as form data (not request payload)
                });

            saved.push(writeRes);
            //array defined at beginning of for loop

            writeRes.success(function(data, status, headers, config){
                $scope.scope.param_values.push(data.id);
                //array of IDs relevant to the REST framework.
            });
            error(function(status){
                //not sure what to do here.
            });
        }

    }

    $q.all(saved).then(function() { //perform other PATCH, DELETE, GET tasks }
正在发布正确的值,但如果出现错误,$q.all中的后期处理不会触发,这会在页面刷新时导致许多问题

是否有任何方法可以触发$q.all而不考虑错误

如果我的问题看起来很难回答,我很抱歉,我真的不太了解前端开发,感觉我在这个项目上绕圈子。

展示了如何“捕捉”拒绝回调并从中恢复过来

在这种情况下,您可以从拒绝函数返回一个新值,
$q
将承诺视为已解决:

writeRes.then(function(data, status, headers, config){
    $scope.scope.param_values.push(data.id);
    //array of IDs relevant to the REST framework.
}, function(error){
    // handle the error and recover
    return true;
});

不确定该建议是否适用,但您可以在任意超时后明确拒绝客户端的promise对象,以使
$q.all
立即返回。这是预期的
$q.all
只有在所有承诺都得到解决时才会触发成功。您可以这样做
var writeRes=$http(…)。然后(successHandlerReturnData、ErrorHandlerDoSomethingWithErrorandReturnDataorFull)
并将其推到阵列上。'这样,您就不会拒绝错误块中的承诺,
$q.all
将始终转到成功块。我相信
$q.all
本身就是一个承诺,因此您应该能够在第二个参数函数中复制所需的内容
$q.all(已保存)。然后(successFn,errorFn)
感谢您的建议,我将查看这些选项!这并没有立即起作用,但我会继续玩这个,因为在我看来这是朝着正确方向迈出的一步。