我有一个 AngularJS 服务,它执行以下操作:
它尝试从 Lawnchair 读取用户数据(带有后备的 localStorage 抽象)。
如果用户数据不在 Lawnchair 中,该服务会调用 REST API 来检索它,并将值存储在 Lawnchair 中。
它返回用户数据。
由于 Lawnchair 操作和 REST 调用都是异步的,我认为这是对 Promises 的完美使用。
但是,我似乎无法收回价值。如果我调试,我可以看到从 REST 调用返回的值,并且还存储在 Lawnchair 中。如果我刷新,我可以看到 REST 调用从未进行过,并且 Lawnchair 返回它的版本。
任何提示表示赞赏!
这是我尝试从控制器中访问值的方式:
$scope.userdata = UserDataStore.Data()
这是相关服务的咖啡脚本:
.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
}
)