角度控制器服务承诺不起作用

时间:2016-04-30 19:05:26

标签: javascript angularjs asynchronous

我想在退出角度控制器之前等待http响应。我写了以下代码。但是id不起作用,因为控制器在返回http调用之前仍然退出。任何人都可以帮我解决这个问题吗?提前谢谢。

var app = angular.module('app', []);

app.factory('MyService', function ($http) {
        return $http.get('/api/endpoint').then(function(res){
          return res.data;
        });
    });

app.controller('MyController', ['$scope', '$http', 'MyService', function($scope, $http, MyService){
  MyService.then(function(data){
    $scope.myVarialbe = data;
  })
}]);

3 个答案:

答案 0 :(得分:0)

wmemcpy

答案 1 :(得分:0)

您可以像这样factory使用返回请求回复 promise,并在控制器中使用{em>返回 .then

promise

答案 2 :(得分:-1)

使用$ q更好。

例如:

app.factory('MyService', ['$http', '$q', function($http, $q) {
return {
   getData: function() {
      var deferred = $q.defer();
      $http.get('/api/endpoint')
          .then( function(resp) {
              deferred.resolve( resp.data );
           });
      return deferred.promise;
     }
   };
}]);

app.controller('MyController', ['$scope', 'MyService',function($scope, MyService){
    MyService.getData().then(function(data){
        $scope.myVarialbe = data;
    })
}]);