我正在开发一个 Angular 应用程序(在 CoffeeScript 中),并且有一个小的 PHP 后端(是的,我知道),它为缓存版本(来自文件)或来自数据库的版本提供承诺。
我为此写了一个工厂:
@myApp.factory 'apiModel', ($http, $q) ->
deferred = $q.defer()
apiData = null
getData = (fromDb) ->
fromDb = (fromDb == true)
url = 'api.php?do=get';
# Append &refresh to get from database
if fromDb then url += '&refresh';
$http.get(url).success (data) ->
apiData = data
deferred.resolve data
.error ->
deferred.reject e.what()
return {
get: (fromDb) ->
if apiData == null || fromDb == true then getData(fromDb)
else deferred.resolve(apiData)
return deferred.promise
}
我可以像这样简单地获取数据:
apiPromise = apiModel.get()
apiPromise.then (data) ->
$scope.updateData(data)
, (reason) ->
console.log reason
到目前为止,效果很好。
然后我想像这样刷新数据:
$scope.refreshData = ->
promise = apiModel.get(true) # get from DB
promise.then (data) ->
$scope.updateData(data)
, (reason) ->
console.log reason
这是行不通的。当我在 中记录响应时getData()
,它会显示正确的刷新数据,但是当我从 Promise 中记录数据时(在 中$scope.refreshData()
),它会显示旧数据。
我认为这是异步请求的问题(它在数据promise.then
之前记录数据getData()
),但这就是承诺的目的,不是吗?
提前致谢