【问题标题】:AngularJS service with promises带有承诺的 AngularJS 服务
【发布时间】:2012-08-20 08:34:38
【问题描述】:

我有一个 AngularJS 服务,它执行以下操作:

  1. 它尝试从 Lawnchair 读取用户数据(带有回退的 localStorage 抽象)。

  2. 如果用户数据不在 Lawnchair 中,服务会调用 REST API 来检索它,并将值存储在 Lawnchair 中。

  3. 返回用户数据。

由于 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
      }
  )

【问题讨论】:

    标签: coffeescript angularjs promise


    【解决方案1】:

    我发现了一些我必须修复的地方:

    1. 在返回对象的Data方法中,我试图返回combinedPromise.promise,考虑到combinedPromise已经是内部的.promise对象,所以我一直返回Undefined。

    2. 为了让值在我的控制器中使用,我必须在 promise 回调中这样做:

      UserDataStore.Data().then((result) ->
           $scope.userdata = result
        )
      

    【讨论】:

      猜你喜欢
      • 2015-04-08
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多