Я хочу знать, можно ли сделать вызов службы, который использует $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 для достаточно близкого решения.
$resource
изngResource
, который делает какое-то странное внутреннее разрешение обещаний, например,$scope.data = $resource('/server/call').get()
- person Phil   schedule 02.12.2014