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

How to resolve a promise within another promise and get the resolution within a controller?

我在服务中有一个功能returns一个承诺。我从不同的服务调用此函数,我想在其中更改承诺的结果并使这个新的更改值可供我的控制器使用。

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;

}]);

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

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

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

非常感谢您抽出宝贵时间。如果您需要更多信息或者我不清楚,请告诉我。

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

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