2

无论承诺是否返回错误,有没有办法触发 $q.all ?

我正在尝试执行多个 $http.post 请求,从用户输入的文本字段中发布值。后端(Django REST 框架)有一个我们实现的值检查器,所以如果 POST 的值与预期的不同(即,在预期整数的地方提交了一个字符串),将返回 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 }

正确的值正在被 POST,但如果有错误,$q.all 中的后处理不会被触发,这会在页面刷新时导致很多问题。

有没有什么方法可以触发 $q.all 而不管错误?

如果我的问题似乎难以捉摸,我深表歉意,我真的对前端开发不太了解,并且觉得我在这个项目中跑来跑去。

4

1 回答 1

1

方法的文档$q.reject()显示了如何“捕获”拒绝回调并从中恢复。

在这种情况下,您可以从拒绝函数返回一个新值,$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;
});
于 2014-08-13T01:12:49.997 回答