没有$ rootScope的事件

时间:2014-10-14 18:08:32

标签: angularjs

让我们在服务中说我需要发出一个http请求并存储该值,然后如果其他东西使用相同的服务,它就可以重用该存储的值,而无需发送请求:

_cachedValue = null
.factory('myService', ($http, $q)->
    getFoo: ->
      dfrd = $q.defer()
      if _cachedValue == null  
         $http.get('/foo').success (data)->
           _cachedValue = data
           dfrd.resolve(_cachedValue)
      else
         dfrd.resolve(_cachedValue)
      return dfrd.promise

那种方式有效。问题是 - 当两个消费者同时尝试调用该方法时,它会发送两个请求。所以我只需要从未发送请求时发送请求,当第二个消费者调用getFoo时,它只会等到请求结束。

每隔几毫秒反复检查_cachedValue不是null - 听起来很蠢,对吧?我无法$watch关于价值变化(服务内部没有$ scope)。我可以使用角度事件总线,并通过$rootScope发出事件。但这听起来非常矫枉过正,因为服务之外的任何人都不会有兴趣听这种事件。有人可以提出更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您只应将$http缓存属性设置为true

如果请求已在进行中,这将阻止更多请求。

请参阅:https://github.com/angular/angular.js/blob/master/src/ng/http.js#L987