使用AngularJS防止类似的POST请求

时间:2015-02-17 09:24:47

标签: angularjs promise ngresource angular-http-interceptors

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

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

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

然而,我似乎无法把这些碎片放在一起,所以任何帮助都是值得赞赏的。我对其他选择持开放态度。

亲切的问候, 添

2 个答案:

答案 0 :(得分:0)

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

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

我希望我帮忙!

答案 1 :(得分:0)

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

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