次のことを行う AngularJS サービスがあります。
Lawnchair (フォールバックによる localStorage 抽象化) からユーザー データを読み取ろうとします。
ユーザー データが Lawnchair にない場合、サービスは REST API を呼び出してデータを取得し、値を Lawnchair に格納します。
ユーザーデータを返します。
Lawnchair 操作と REST 呼び出しの両方が非同期であるため、これは Promises の完全な使用方法であると考えました。
しかし、私は価値を取り戻すことができないようです。デバッグすると、REST 呼び出しから返された値と Lawnchair に保存されている値を確認できます。更新すると、REST 呼び出しが行われず、Lawnchair がそのバージョンを返していることがわかります。
どんなヒントでも大歓迎です!
コントローラー内から値にアクセスしようとしている方法は次のとおりです。
$scope.userdata = UserDataStore.Data()
関連するサービスの coffeescript は次のとおりです。
.factory('UserData', ($resource,$location) ->
return $resource('http://' + $location.host() + '/Services/userinfo')
)
.factory('UserDataStore', ($resource, $location, UserData, $q) ->
GetUserDataFromXhr = () ->
xhrDeferred = $q.defer()
UserData.get((userdata) ->
xhrDeferred.resolve userdata.userInfo
)
return xhrDeferred.promise
GetUserDataFromStore = () ->
storeDeferred = $q.defer()
Lawnchair ()->
@get 'userdata',(result) ->
storeDeferred.resolve result
return storeDeferred.promise
return {
Clear: () ->
Lawnchair ()->
@remove('userdata')
Data: () ->
sPromise = GetUserDataFromStore()
combinedPromise = sPromise.then((result) ->
if not result
xPromise = GetUserDataFromXhr()
xPromise.then((result) ->
resultString = JSON.stringify(result)
userdata = {key:"userdata", value:resultString}
Lawnchair () ->
@save userdata
)
return xPromise
else
return result
)
return combinedPromise.promise
}
)