1
服務我有一個AngularJS服務,其執行以下操作: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
}
)