AngularJS$http.get返回速度不够快

AngularJS$http.get返回速度不够快,angularjs,http,Angularjs,Http,所以,我的问题是,$http.get在工厂完成执行之前还没有完成响应…我应该如何解决这个问题?我在某个地方读到,我可以实现app.config将变量注入一个提供程序……这是一个解决方案吗?通常工厂只会通过调用带有$http的方法返回承诺,然后调用工厂的代码将在承诺实现时处理“.then” .factory('someFac', function (CONFIG, $injector, $http) { return $http.get('url').then(function (respo

所以,我的问题是,$http.get在工厂完成执行之前还没有完成响应…我应该如何解决这个问题?我在某个地方读到,我可以实现app.config将变量注入一个提供程序……这是一个解决方案吗?

通常工厂只会通过调用带有$http的方法返回承诺,然后调用工厂的代码将在承诺实现时处理“.then”

.factory('someFac', function (CONFIG, $injector, $http) {
   return $http.get('url').then(function (response) {
      var temp = response.data.answer;
      var answer = '';
      if(temp == bar){
          answer = barAnswer;
       }
      else if(temp == foo){
          answer = fooAnswer;
      }
      return $injector.get(answer);
   }
}

您的工厂/服务应该是维护数据的对象,控制器应该只使用它(这种方式可以跨不同的控制器进行双向绑定)

现在,您的工厂可以在任何地方注入并维护数据,因此所有控制器都将实时更新。要确保数据已加载,请确保将init放入路由中的解析中

.factory('someFac', function ($http) {
    var self = this;
    self.init = function() {
        return $http.get('url').then(function(response) {
            self.data = response.data;
        });
    }
}
现在,在控制器中,您可以这样使用它:

resolve: {
    someFac: function (someFac) {
        return someFac.init();
    }
}

希望这有帮助。

不清楚您在问什么?返回$injector时,应答变量的值保持在“”,因为$http.get承诺没有快速执行。为什么不在then函数中创建所需的对象$http.get是异步工作的,也许其他一些函数可以同步工作。也许会帮助你。我该如何设置它?虽然我完全同意这一点,但我不确定它是否解决了OP的问题。但是,我认为这对他的重构来说是朝着正确方向迈出的一步。我喜欢这个想法,但是Angular实际上调用了这个代码,我们不能修改它。我以前看到过这个答案,谢谢你的考虑,但是控制器与我的问题无关。对,我的帖子没有说你的控制器是问题所在。您的问题是您没有解决承诺,因此您的页面在获取数据之前加载。
resolve: {
    someFac: function (someFac) {
        return someFac.init();
    }
}
.controller('someControleler', function ($scope, someFac) {
    $scope.data = someFac.data;
});