0

我目前正在构建一个带有多个小部件的仪表板页面。这些小部件通过 REST 调用 ($resource) 检索它们的数据。一些小部件进行类似的调用,我不想 DDOS 我们的服务器,所以我正在寻找一种方法来只进行一次调用并以相同的响应解决所有类似的请求。

由于我仅限于使用 POST 请求,因此我无法使用 $resource 提供的缓存选项。这似乎正是我想要的,但仅适用于 GET 请求。

我正在考虑使用http拦截器对类似的POST请求进行排队,只触发其中一个并在第一个得到响应时解决它们。

但是,我似乎无法将这些部分拼凑在一起,因此不胜感激。我对其他选择持开放态度。

亲切的问候,蒂姆

4

2 回答 2

0

AngularJS 中的服务是单例的,因此解决方案是将响应作为变量存储在服务中。然后下次您执行请求时,请先检查变量是否为空,如果不是,您将其包装在一个承诺中并返回它。如果它为空,那么您执行请求,并存储下一次调用的响应。

您也可以在请求服务或拦截器服务中使用它。

我希望我有所帮助!

于 2015-02-17T09:47:23.163 回答
0

重构您的小部件以依赖于服务(单例)。该服务应该通过 XHR 轮询服务器,或者通过 websocket 获取服务器推送以获取更新。

如果轮询,请查看服务器端缓存和 etag。

于 2015-02-17T10:24:56.363 回答