Как интегрировать ресурс с двумя разными сервисами для запроса сервера с предоставленными им параметрами?
Я изучаю Angular, и мне не нравится мой нынешний подход. Текущий контроллер использует в первую очередь Geolocation
обслуживание и когда getLocation()
решен, то Pagination
служба вызывается с параметром местоположения. Есть ли лучшее решение, чтобы предоставить один сервис, который сервер запросов с местоположением? Могу ли я интегрировать текущую логику и переместить или использовать Pagination
Служба напрямую через почтовую фабрику и сервер запросов с параметрами данной страницы и местоположения после разрешения? Я хотел бы загрузить новые данные через вызов только одного метода ресурса, например, из функции loadPage(). Как я могу рефакторинг этого кода?
app.controller('MainCtrl',['$scope','Post','Pagination','Geolocation'
($scope, Post, Pagination, Geolocation) ->
$scope.posts = []
Geolocation.getLocation().then (location) ->
Pagination.paginate $scope, Post, 10, (postsRes) ->
$scope.posts.push posts for posts in postsRes
, params: {location: location}
])
app.factory 'Post', ($resource) ->
$resource '/posts/:id.json', { id: '@id' }
app.service "Geolocation", ['$q', '$window', ($q, $window) ->
@getLocation = ->
deferred = $q.defer()
return deferred.resolve @loc if @loc
if $window.navigator and $window.navigator.geolocation
$window.navigator.geolocation.getCurrentPosition (position) ->
@loc = position.coords
deferred.resolve position.coords
deferred.promise
]
app.service 'Pagination', ->
@paginate = ($scope, @resource, @maxElemPerPage=10, @onNewPage, @query={}) ->
@page = 1
@canLoadNextPage = true
$scope.loadPage = (promise) =>
return promise.resolve() unless @canLoadNextPage
@load promise
@load = (promise) =>
@canLoadNextPage = false
q = angular.extend @query, page: @page
@resource.query q, (resources) =>
@canLoadNextPage = true if resources.length is @maxElemPerPage
@page++
@onNewPage resources if @onNewPage
promise.resolve() if promise
@load()
@
1 ответ
Создайте единый сервис, который объединяет оба, пусть он создает свое собственное обещание, выполняет вызовы, объявляет обратные вызовы для обоих сервисов и возвращает обещание. Как только вторая служба вернется, разрешите свое обещание.