Angular' $ http的简单承诺

时间:2014-09-03 19:56:50

标签: angularjs angular-promise

我发现自己在Angular服务中做了很多这样的事情:

getStats: function() {
  var deferred = $q.defer();
  $http.get('/stats').success(function(stats) {
    deferred.resolve(stats);
  });
  return deferred.promise;
}

请注意,我正在返回的承诺会解析为返回的数据。这不是我可以使用.success回调的情况。

有没有一种更简单的方法可以在不使用$q的情况下执行此操作?

2 个答案:

答案 0 :(得分:2)

这应该有效,因为$http.get会返回promise对象,

getStats: function() {
       return $http.get('/stats');
    }

在您的代码中,您可以像这样使用它:

someService.getStats().success(successFN);

答案 1 :(得分:0)

创建API服务:

app.factory('apiService', ['$http', function($http) {
    'use strict';
    return {
        getStats: function (deviceId) {
            return $http.get('/stats');
        }
    }
}

然后在控制器中注入apiCall并使用getStats方法。

app.controller("MyController", ['$scope', 'apiService', '$routeParams', function($scope, apiService, $routeParams) {
    'use strict';
    angular.extend($scope, {
        info: {},
        deviceId: $routeParams.deviceId,
        loadInfo: function () {
            apiService
                .getStats($scope.deviceId)
                .succes(function (res, statusCode) {
                    $scope.info = res;
                })
                .error(function () {
                    alert('Oh NOS!');
                })
        }
    });

    $scope.loadInfo();
}]);