无法从$ http promise中获取值,然后()代码未执行

时间:2016-08-11 11:42:30

标签: javascript angularjs promise angularjs-service angular-promise

我过去曾遇到$http服务问题,我通过创建服务来解决我的请求(对于那些感兴趣的人,这里是帮助我的答案的链接,编辑部分:creating a service for $http request)。

现在的问题是,此解决方案似乎无法处理更大的$http请求。在前一个中,我只将请求返回的单词分配给$scope值。现在,返回的是JSON格式的整个配置(我也希望存储在$scope中)。

我理解promises的概念,$http返回的值在响应到来之前是一个空字符串,这可能需要一些时间。但在这里,配置不是那么长,我似乎从来没有得到答案;我显示了在视图上收到值的变量,并且在调用函数时它不会改变。

以下是代码:

视图

...
<div>
    {{loadedConfig}} 
</div>
<button ng-click="loadconfig()">load</button>

控制器

app.controller('ConfigurationCtrl', function ($scope, $rootScope, configloader) {
    ...
    $scope.loadedConfig = 'noconfig'
    $scope.loadconfig = function() {
        configloader.load().then(function (response) {
            $scope.loadedConfig = response.data;
        });
    };

工厂

angular
    .module('app')
    .factory('configloader', configloaderFactory);

function configloaderFactory($http) {

   var service = {
      load: load
   }

   return service;

   function load() {
      return $http.get('url/config');
   }
}

如果我拨打较小的加权请求&#39;,则无问题。我也尝试了其他方法来进行此调用,但在每种情况下它都没有工作...(使用$q.deferred,使用success()/ error()或使用自定义sleep()函数)

当我收到回复时,then中的代码是否应该执行? (我认为是,但它永远不会。)

由于

3 个答案:

答案 0 :(得分:1)

尝试在工厂中返回promise,例如:

function load() {
     var promise =   $http.get('url/config').then(function(response){
     return response.data;     
     }, function(err){
       //error     
       return err;
     });
     return promise;
   }

答案 1 :(得分:0)

尝试:

angular
    .module('app')
    .factory('configloader', configloaderFactory);

function configloaderFactory($http) {

   var service = {
      load: load
   }

   return service;

   function load() {
      return $http.get('url/config')
      .then(requestSuccessful)
      .catch(requestFailed)
   }

   function requestSuccessful(response) {
        return response.data;
    }

   function requestFailed(error) {
        console.log('Fail', error.data)
    }

}

答案 2 :(得分:0)

由于这与长(较大)请求有关,请考虑更改代码并使用超时:

xls