如何使控制器等待承诺从角度服务解决

Axs*_*ech 11 javascript ajax promise angularjs angularjs-service

我有一个服务正在向后端发出AJAX请求

服务:

    function GetCompaniesService(options)
    {
        this.url = '/company';
        this.Companies = undefined;
        this.CompaniesPromise = $http.get(this.url);

    }
Run Code Online (Sandbox Code Playgroud)

控制器:

var CompaniesOb = new GetCompanies();
CompaniesOb.CompaniesPromise.then(function(data){
   $scope.Companies = data;
});
Run Code Online (Sandbox Code Playgroud)

我希望我的服务能够处理".then"函数,而不必在我的控制器中处理它,并且我希望能够让我的控制器在服务中的承诺解决之后对服务中的数据进行操作.

基本上,我希望能够像这样访问数据:

var CompaniesOb = new GetCompanies();
$scope.Companies = CompaniesOb.Companies;
Run Code Online (Sandbox Code Playgroud)

随着承诺的解决在服务本身内部处理.

这可能吗?或者是我能够访问该承诺的唯一方法是解决方案来自服务外部吗?

Sco*_*ott -1

您可以将 $scope 传递到 GetCompanies 并将 $scope.Companies 设置为服务中的数据

 function GetCompaniesService(options,scope)
 {
    this.url = '/company';
    this.Companies = undefined;
    this.CompaniesPromise = $http.get(this.url).then(function(res) {
      scope.Companies = res;
    });

 }
Run Code Online (Sandbox Code Playgroud)

您必须注意使用数据的顺序。这就是承诺背后的原因。