如何解决另一个承诺中的承诺并在控制器内获得解决方案?

时间:2015-08-31 16:20:42

标签: javascript angularjs angular-promise angular-services

我在服务中有一个函数返回一个promise。我从一个不同的服务调用此函数,我想在其中更改promise的结果,并使我的控​​制器可以使用这个新的更改值。

angular.module('test').service("service1", function($q) {
      function doSomething(something) {    
           //parses some data
           return deferred.promise;
       }

  return {
      doSomething: doSomething
  }
 });

 angular.module('test').service("service2", ['service1', $q, function(service1, $q) {
     var deferred = $q.defer();
     var myResult = deferred.promise;      

     service1.doSomething("test").then(function (result) {
         var alteredResult = result + "Altered"; //result I want to be accessible by my controllers
         deferred.resolve(alteredResult)
     });

 return {
      myResult: myResult
  }
}]);


angular.module('test').controller('testController', ['$scope', 'service2', function ($scope, service2) {

      $scope.test = service2.myResult;

}]);

当我在myResult之外初始化.then()并在里面更新它时显然不起作用,因为myResult在更改之前已传递给控制器​​。这导致我尝试在service2内创建另一个承诺。

完成所有这些后,我在$scope.test中得到了一个承诺,但它最终成为一个空白的{} javascript对象。

如何正确存储service2的更改结果,以便我可以从控制器访问它?

非常感谢你的时间。如果您需要其他信息或我不清楚,请告诉我。

1 个答案:

答案 0 :(得分:1)

您正在为范围变量分配承诺。您应该解决承诺(承诺链)并改为分配已解决的值。

service2.myResult.then(function(result) {
  $scope.test = result;
});