这个问题参考了Play 2.2 Java。
我有一个从Web服务检索的项目列表。该列表将经常被要求,所以我在本地缓存列表。
我已经设置了一个客户端代码可以调用以透明地获取列表的方法。该方法将首先检查缓存,如果列表不在本地,则回退到Web服务。
我遇到的问题是从Web服务重新生成缓存列表。我无法使用Cache.getOrElse
方法,因为它需要列表的实例,Play.libs.WS
会返回Promise<WS.Response>
,我会映射到Promise<List>
。
我目前的策略如下:
Promise
Promise
,返回包装列表(如果存在),或调用Web服务适配器,并返回返回的Promise<List>
现在,在我从步骤2中的Web服务适配器返回Promise
之前,我在promise上注册了一个回调,以便在兑换时将列表添加到缓存中。
我想知道的是:有没有办法可以将Web服务的列表添加到缓存中,而不会影响流程的副作用?
我尝试了另一种策略,我在其中映射了返回的Promise
,缓存了它,并返回了列表,但这似乎是一种更明显的副作用。如果可以,我想避免这样做。