我想知道是否有更简洁,更可重用的方式来实现以下用例:
我有一个搜索表单,使用用户输入的值将RPC发送到服务器。回调返回与搜索条件匹配的项目。搜索可能需要几秒钟,我们希望用户能够更改其搜索条件,即使之前的搜索尚未完成。如果他这样做,则应忽略所有先前的搜索结果,并应显示最后的结果。如果我们不考虑这一点,有时最新的通话会在较旧的通话之前返回,导致最新的结果被覆盖,这意味着所呈现的结果不符合当前输入的标准。
我们目前通过将回调分配给" lastCallback"来解决此问题。领域。每个回调实例都可以访问此字段并检查该字段是否等于自身。如果没有,则在此期间发送了较新的搜索请求,因此忽略了此旧调用的结果。
GWT是否提供了处理此用例的内置方法?
答案 0 :(得分:2)
您可以取消之前的通话。让异步方法返回com.google.gwt.http.client.Request
而不是void
,因此您可以在其上调用cancel()
。这样可以确保您的以前的回调永远不会被调用,而且您只有一个持续的请求(至少从客户端的角度来看;您还有几个正在处理服务器因为取消请求是客户端和网络的事情,并且没有暴露给servlet服务器端)
答案 1 :(得分:0)
我认为你的方法是正确的。
这不是GWT问题 - 一旦浏览器调用服务器,服务器就会响应 - 无论您是否需要此响应。所以你必须有一个标志,以决定哪个响应是不需要的。
答案 2 :(得分:-1)
在搜索进程中第二个请求到达时,一个优化可能是从服务器返回第一个请求的null或特定异常。