Javascript AngularJS$q.all,不管错误如何触发
是否有一种方法可以触发$q.all,而不管承诺是否返回错误 我试图执行多个$http.post请求,从用户输入的文本字段中发布值。后端(Django REST framework)有一个我们实现的值检查器,因此如果所发布的值与预期值不同(即,在预期整数的位置提交字符串),将返回400状态,这反过来会导致$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
//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)
感谢您的建议,我将查看这些选项!这并没有立即起作用,但我会继续玩这个,因为在我看来这是朝着正确方向迈出的一步。