【发布时间】:2015-01-30 01:55:41
【问题描述】:
我想知道是否可以使用$http 进行服务调用,以便直接返回数据而不返回承诺?我尝试使用$q 并推迟,但没有任何运气。
这就是我的意思:
我有一个服务:
angular.module('myModule').factor('myService', ['$http', '$q',
function($http, $q) {
// Public API
return {
myServiceCall: function() {
return $http.get('/server/call');
}
};
}
]);
这就是我的称呼:
// My controller:
myService.myServiceCall().then(function(data) {
$scope.data = data;
});
我想避免这种情况,而是希望拥有:
$scope.data = myService.myServiceCall();
我希望在该行完全解决,可以吗?
我尝试了一些 $q、defer 和 'then' 方法的组合,但似乎无法正确使用,因为该方法会立即返回。
编辑:
如果你想知道为什么,主要原因是我想简化控制器代码,这很容易用 ngResource 完成,因为这些调用会在模板中自动解析,所以我想避免需要做整个 ' .then' 每次。
并不是我不喜欢异步特性,我们的大部分代码都利用了它,只是在某些情况下,采用同步方式会有所帮助。
我认为现在正如你们中的一些人所指出的,我将使用 $resource 来获得足够接近的解决方案。
【问题讨论】:
-
这是一个异步操作,所以答案是“不是真的”。您可以使用来自
ngResource的$resource,尽管它会执行一些时髦的内部承诺解决方案,例如$scope.data = $resource('/server/call').get() -
至于为什么,我需要使用 'then' 来获取数据,如果它是 ng-resource,它会很好,因为模板会自动解决这些问题。但是对于 $http,我需要每次在控制器上手动解决它,我想我想拥有 ng-resource 的清洁度。
标签: javascript angularjs angular-promise