如何解决另一个承诺中的承诺并在控制器中获得解决方案?
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;
});
我在服务中有一个功能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;
});