데이터가 공장 출하 전에 약속이 호출 될 때 문제가 있습니다. 나는 특정 국가의 주 목록으로 검색하고 가져 오는 공장을 가지고있다.AngularJS Cached Promise
컨트롤러가 처음로드되면 지정된 국가에 대한 상태 목록이 올바르게 표시됩니다. 그러나 changeCountry 함수가 호출되고 새 상태 목록을 가져 오기위한 호출이 호출되면 약속은 데이터가 반환되기 전에 해결됩니다. 즉, "then"은 "resolve"전에 호출되고 데이터는 이전 호출에서 반환됩니다.
공장 :
app.factory('localStates', ['$http', '$q', ($http, $q) ->
# set deferred object for use later
deferred = $q.defer()
# get states
get: (country_code) ->
# query for list of states
$http
method: 'GET'
url: '/api/areas'
params:
country_code: country_code
.success (data, status) ->
# send data through promise
deferred.resolve data
.error (data, status, headers, config) ->
# send error data through promise
deferred.reject data
return deferred.promise
])
컨트롤러
app.controller('LocalNumberCtrl', ['$scope', 'localCountries', 'localStates',($scope, localCountries, localStates) ->
getStates = ->
localStates.get($scope.LocalCountry).then (data) ->
# set scope variable
$scope.States = data
, (data) ->
# get states error
# get local countries list
localCountries.get().then (data) ->
# set scope variable
$scope.Countries = data
# set default country
$scope.LocalCountry = 'GB'
# get list of states
getStates()
, (data) ->
# get countries error
$scope.changeCountry = ->
getStates()
])
데이터가 크게 감상 할 첫 번째 약속을 반환하지 두 번째 약속을하는 방법에 대한 조언을. 이전 약속을 지우려면 $ 타임 아웃이나 다른 방법으로 필요한 것이 있는지 확실하지 않습니다.
미리 감사드립니다.
은 (는) coffeescript가 아니십니까? – Jorg