【问题标题】:Angular pass deferred error from service to controller从服务到控制器的角度传递延迟错误
【发布时间】:2014-10-08 02:18:36
【问题描述】:

在我的 Angular 应用程序中,我有一个控制器。控制器有一个方法,它在名为Service 的服务中调用异步函数。这是控制器代码:

$scope.controllerMethod = function(){       
        Service.serviceMethod($scope.x, $scope.y).then(function(data){
                //request succeeded, so do nothing
        }, function(data){
                //there was an error, show error message
        });
}

这是Service 服务中的serviceMethod

serviceMethod: function(x, y){
        return $http.post('save', {
                id: x, type: b
        }).then(function(data){
                //update variables in the service
        }, function(data){
                //send error message to controller
        });
}

Service 方法调用服务器时,服务器会在必要时返回错误。如何将该错误响应发送到我的控制器?在当前设置下,无论$http 请求返回成功还是错误,控制器中的 deferred 总是执行它的成功方法。我想为控制器中的 deferred 调用错误方法,将来自服务器的数据传递给它。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    我会将服务编写为:

    serviceMethod: function(x, y){
            return $http.post('save', {
                    id: x, type: b
            }).success(function(data){
                    // do things Service related when call is successful
            }).error(function(data, status){
                    // do things error related...
            })
    
    }
    

    然后像这样在控制器中引用它:

    Service.serviceMethod($scope.x, $scope.y).success(function(data){
            // request succeeded, so do nothing
    }).error(function(data, status){
            // error occured, do whatever
    });
    

    这就像一个魅力......这是docs

    【讨论】:

    • 工作得很好,谢谢!我不知道为什么。我认为.then() 只是编写successfailure 回调的另一种方式。知道为什么我会看到不同的行为吗?它甚至在您链接的文档中说:“由于调用 $http 函数的返回值是一个承诺,您还可以使用 then 方法注册回调,这些回调将接收一个参数 - 一个表示响应的对象。 "
    • 我真的不知道,但我的猜测是,如上所述,将函数返回给服务方法会以某种方式将“成功”和“错误”方法暴露给控制器。不确定...
    • 我不确定你的意思。据我所知,在这两种情况下,我们都从服务方法返回了 deferred。他们都返回$http(...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多