if语句中的异步调用最终执行else语句

时间:2015-08-30 19:53:33

标签: javascript angularjs asynchronous

在我们在if块内执行异步调用的特定情况下,如果else求值为doSubmittrue语句块如何执行?结果是它总是在ERROR_2评论之后排在最后:

$scope.save = function() {
    if (doSubmit) {
        var dto = {
            'attributes': $scope.fields,
            'requestOrigin': $location.absUrl()
        };
        var req = {
            method: 'POST',
            url: 'endpoint',
            data: dto
        };
        $http(req).success(function(data, status) {
            // SUCCESS
            $scope.completed(data);
        }).error(function(data, status) {
            // ERROR_1
            $scope.validationFailed();
        });

    } else {
        // ERROR_2
        $scope.validationFailed();
    }
}
// Used to provide error messages about input validation
$scope.validationFailed = function(message, id) {
    $scope.alerts.push({ 
        type: 'danger', 
        msg: message || 'error.validation_failed', id: id || 'general'
    });
}

我在某个地方读过这个案例,但不记得来源。任何链接或简短的阐述都会有所帮助。

附加1 $ scope.validationFailed

1 个答案:

答案 0 :(得分:1)

我的评论作为答案:

可能是执行$http的{​​{1}} 错误回调?尝试在错误回调中添加$scope.validationFailed();

这可能表示服务器端问题,导致服务器返回状态代码与 200 不同。alert(1);语句和错误回调最终都执行相同的功能,但它只显示else语句不是正在执行的语句。