Я хочу знать, можно ли сделать вызов службы, который использует $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', но не может показаться, что это правильно, поскольку метод немедленно возвращается.
Edit:
Если вам интересно, почему, основная причина в том, что я хотел упростить код контроллера, это легко сделать с помощью ngResource, поскольку эти вызовы автоматически разрешаются в шаблонах, поэтому я хотел избежать необходимости делать все ". then 'everytime.
Это не то, что мне не нравится природу Async, большая часть нашего кода использует ее, это просто в некоторых случаях, когда синхронный способ полезен.
Я думаю, что пока некоторые из вас указали, я буду использовать ресурс $для решения довольно близко.