Angularjs 什么';s确定我的服务是否完成的最好方法是加载&;处理HTTP get请求?

Angularjs 什么';s确定我的服务是否完成的最好方法是加载&;处理HTTP get请求?,angularjs,angularjs-service,Angularjs,Angularjs Service,我在Angular JS中有一个服务,它基本上执行HTTP GET&一些后期处理,如: angular.module('myApp') .service('graphDataService', function($http) { this.getGraphData() { $http.get('http://localhost:32105/chartData') .then(function(result) { // Perform p

我在Angular JS中有一个服务,它基本上执行HTTP GET&一些后期处理,如:

angular.module('myApp')
  .service('graphDataService', function($http) {
    this.getGraphData() {
      $http.get('http://localhost:32105/chartData')
        .then(function(result) {
          // Perform post processing here   
        });
    };
  });
在GET请求和后处理完成后,与我的控制器通信的最佳方式是什么?我已尝试在我的服务中创建
this.doneLoading
变量,但无法从异步代码访问它

我在Angular还是个新手,所以任何建议或批评都将不胜感激。谢谢

$http.get()
返回一个承诺,然后调用该承诺。我认为正确的解决办法是让服务返回承诺,而不是通知呼叫方

如果您需要在您的服务中进行后处理,您应该创建自己的承诺,并按照A.B在其示例中所示的方式返还该承诺。:)

$http.get()
返回一个承诺,然后调用该承诺。我认为正确的解决办法是让服务返回承诺,而不是通知呼叫方


如果您需要在您的服务中进行后处理,您应该创建自己的承诺,并按照A.B在其示例中所示的方式返还该承诺。:)

您可以使用承诺并返回承诺,或者应该对其使用延迟或解决方法

使用$q

angular.module('myApp')
  .service('graphDataService', function($http,$q) {
    var defer = $q.defer();
    this.getGraphData() {
      $http.get('http://localhost:32105/chartData')
        .success(function(result) {
           defer.resolve(result);
        });
    };
    return defer.promise;
  });

现在您可以在控制器中使用then()

您可以使用承诺并返回承诺,或者应该对其使用延迟或解析方法

使用$q

angular.module('myApp')
  .service('graphDataService', function($http,$q) {
    var defer = $q.defer();
    this.getGraphData() {
      $http.get('http://localhost:32105/chartData')
        .success(function(result) {
           defer.resolve(result);
        });
    };
    return defer.promise;
  });

现在,您可以在控制器中使用then()

这正是我在Emil回答后计划的方式。我真的很感激你的回答和例子——我希望你不介意我在埃米尔回答第一个问题的时候给他一个表扬。这正是我在埃米尔回答之后打算怎么做的。我真的很感谢你的回答和例子——我希望你不介意我在埃米尔回答第一个问题时给他一个表扬。谢谢埃米尔,我很感激!谢谢你,埃米尔,我很感激!