Javascript 如何从另一个服务AngularJS访问承诺
我的服务有一个来自另一个服务的承诺。我想直接访问数据 这是我服务的一小部分:Javascript 如何从另一个服务AngularJS访问承诺,javascript,angularjs,Javascript,Angularjs,我的服务有一个来自另一个服务的承诺。我想直接访问数据 这是我服务的一小部分: factory('CalculationFactory', function(SizeFromPipe){ var input = { sizes: function(pipe_id){ var sizesFromPipes = SizeFromPipe.getSizes(pipe_id); sizesFromPipes.then(function(val
factory('CalculationFactory', function(SizeFromPipe){
var input = {
sizes: function(pipe_id){
var sizesFromPipes = SizeFromPipe.getSizes(pipe_id);
sizesFromPipes.then(function(val){
console.log(val); //Is an object
return val;
});
}
return input;
}).
这是我的“数据服务”:
我想从我的控制器执行此操作:
$scope.sizes = CalculationFactory.sizes(pipe_id)
但是我没有定义
有什么想法吗
更新:添加了数据服务。我知道我可以用访问这个。然后。。来自控制器。我真的很想保持我的控制器干净,因此如果可以在我的模型中解决这个问题,那就太好了。警告:这都是未经测试的,我很不确定这是否是最好的解决方案。如果你想要防弹的东西,等一个更专业的人 尽管您希望做正确的事情,但仍然会被异步性愚弄 可能是这样的:
factory('CalculationFactory', function(PipeCalculation, SizeFromPipe){
var input = {
sizes: function(pipe_id){
return SizeFromPipe.getSizes(pipe_id);
});
},
}).
// in controller
CalculationFactory.input.sizes(pipe_id).then(function(promise){
$scope.sizes = promise;
})
。。。会有帮助的
不过,有很多方法可以做到这一点。查看PipeCalculation的代码也会有所帮助。也许你想得太多/把事情复杂化了
另一种方法是返回一个新的承诺
factory('CalculationFactory', function(PipeCalculation, SizeFromPipe){
var input = {
sizes: function(pipe_id){
// Assume that $q is available
var defer = $q.defer();
SizeFromPipe.getSizes(pipe_id).then(function(promise){
defer.resolve(promise);
})
return defer.promise;
});
},
}).
我个人保持资源工厂干净,而是在
$routeProvider
中使用resolve,并找到了通过$route.current.scope
访问范围变量的方法。所以,就在那里。
并且控制器中没有代码,当路由更改时,它会自动从服务器获取响应
resolve: {
anyname: function($route, Pipe) {
Pipe.query($route.current.params, function(data) {
$route.current.scope.some_variable = data;
});
}
}
资源
something.factory("Pipe", function($resource) {
return $resource('/api/sizes/fromPipe/:id');
})
在
工厂('CalculationFactory'
)的末尾,您是否返回了任何内容?是的,当然。修复了它。Thxare您确定CalculationFactory.input.sizes(管道id)
有效吗?我想应该是CalculationFactory.sizes(管道id)
啊,抱歉。修复了它。我的实际模型中还有一层。我认为我们需要以某种方式自定义控制器创建过程,以便仅在解决所有依赖关系时创建控制器。(我还不知道如何做)
something.factory("Pipe", function($resource) {
return $resource('/api/sizes/fromPipe/:id');
})