angular 通过服务定义的接口请求数据,请求到的数据为什么在服务外面获取不到呢

 mainModelHttpService.getHttpGetMainCountModelPromise("", "").success(function(response) {
        $scope.Data = [{
            value: response.Register,
            name: '注册'
        }, {
            value: response.Using,
            name: '使用中'
        }, {
            value: response.Fault,
            name: '故障'
        }, {
            value: response.Scrap,
            name: '报废'
        }];
       console.log( $scope.Data);//这里可以打印出来
    });
    console.log($scope.Data); //undefined

现在很纳闷,请求到的数据是挂到了$scope上,为什么在这个服务外获取不到呢?
应该怎么做才能获取到呢 因为这些数据是在后面指令中要用的

下面是我在服务中封装的$http请求

var httpGetMainCount = function(start, end) {
        var deferred = $q.defer();
        $http.get("/statistic?start=" + start + "&end=" + end).success(function(response) {
            var temp = response.Data;
      
         deferred.resolve(temp);
        }).error(function(e) {
            var errMsg = e.Message || e.ErrMsg || e;
            deferred.reject(errMsg);
        });
        return deferred.promise;
    };
    var getHttpMainCountModelPromise = function(start, end) {
        httpGetMainCount(start, end);
        return httpGetMainCountPromise;
    };

这样写的话控制台一直报success of undefined

阅读 2.6k
3 个回答

我怎么记得这个问题有人答过了。

异步操作,在success回调里处理你的数据。

把你的HHTTP请求用promise封装一下,调用then方法来处理你的数据。
参考$q

这个问题是个好问题,首先angularhttp服务使用的是类似Promise的实现;所以你在Promise的外面通过同步的方式是不会拿到数据的,你可以多了解一点关于Promise的知识。可以看看这里Promise 对象,或者我之前写的文章ES6 Promise
针对你上面的问题:

 mainModelHttpService.getHttpGetMainCountModelPromise("", "").success(function(response) {  
        $scope.Data = [{
            value: response.Register,
            name: '注册'
        }, {
            value: response.Using,
            name: '使用中'
        }, {
            value: response.Fault,
            name: '故障'
        }, {
            value: response.Scrap,
            name: '报废'
        }];
       console.log( $scope.Data);//这里可以打印出来
       return response; // *** 返回这个promise ***
    }).then(() => {
        // TODO 这里是可以对$scope.Data 进行操作的。
        // 如果是后面的指令需要,可以在这里进行操作的
    })
    console.log($scope.Data); //undefined
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题