我在服务中有一个函数返回一个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
的更改结果,以便我可以从控制器访问它?
非常感谢你的时间。如果您需要其他信息或我不清楚,请告诉我。
答案 0 :(得分:1)
您正在为范围变量分配承诺。您应该解决承诺(承诺链)并改为分配已解决的值。
service2.myResult.then(function(result) {
$scope.test = result;
});