如何在Angular控制器中将succesCallback与errorCallback分开

时间:2017-07-20 20:55:52

标签: angularjs angular-http

我有这段代码:

app.factory('clients', ['$http', function ($http) {
    var _getClient = function (clientId, callback) {
        callback = callback || function () {};
        $http({
            method: 'GET',
            url: '/simple_crm/web/api.php/client/'+clientId
        }).then(function (data) {
            callback(data);
        }, function (error) {
            callback(error);
        });
    };
    return {
        getClient: _getClient
    };
}]);

并在控制器中

app.controller('ClientDetailCtrl', ['$scope', 'clients', '$routeParams', function ($scope, clients, $routeParams) {
    $scope.user = {};

    clients.getClient($routeParams.clientId,
            function (data) {
                //The block executes clientId is correct
                $scope.user = data;
                if (404 === data.status) {
                    //The block executes when Id does not exist and status page is 404
                }
            }
    );
}]);

此代码正常工作 - 隐藏/显示页面上的div块,但是可以隔离代码块错误,例如:

clients.getClient($routeParams.clientId,
    function (data) {
        //clientId is correct
        $scope.user = data;
    },
    function (data) {
        if (404 === data.status) {
            //clientId does not exist
        }
    }
);

有什么可能吗?最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

  

此代码正常工作 - 隐藏/显示页面上的div块,但是   可以隔离代码块错误,例如:

您可以为错误定义另一个回调,并在错误

时调用它
var _getClient = function (clientId, successCallback, errorCallback) {
  if (success) {
    successCallback();
  }
  if (error) {
    errorCallback()
  }
}
  

有什么可能吗?最佳实践是什么

最好和最简单的方法是在工厂中返回此$ http承诺,这样您就可以在控制器中使用所有$ http promise方法(。then().success()或。{{1 })。您将只使用一个承诺,如果需要,它可以与另一个承诺链接,而不是被回调打破。

工厂:

error()

控制器:

var _getClient = function (clientId) {
    return $http({
        method: 'GET',
        url: '/simple_crm/web/api.php/client/'+clientId
    });
};