3

有没有办法取消/中止请求工厂请求?使用 GWT 2.3

4

2 回答 2

4

调用方法后无法取消请求fire()。考虑构建一个自定义Receiver基类,如下所示:

public abstract class CancelableReceiver<V> extends Receiver<V> {
  private boolean canceled;

  public void cancel() {
    canceled = true;
  }

  @Override
  public final void onSuccess(V response) {
    if (!canceled) {
      doOnSuccess(response);
    }
  }

  protected abstract void doOnSuccess(V response);
}

可以为类型中的其他方法重复该模式Receiver

于 2011-07-23T19:57:08.053 回答
3

另一种选择是创建替代com.google.web.bindery.requestfactory.shared.RequestTransport类型,而不是使用DefaultRequestTransport. 这样做的缺点(以及 BobV 方法的优点)是你不知道你在服务器上的请求中什么时候杀死它,所以它可能已经运行了你的一些方法——你不会从其中任何一个那里得到反馈,你只会停止传出的请求。

我怀疑这就是为什么 RF 没有像 RPC 那样具有此功能的原因。甚至考虑 RPC 或 RequestBuilder 的情况——它们如何通知服务器他们已经改变主意,并且不运行请求?我的理解是他们没有 - 他们提前关闭的唯一方法是当他们尝试读/写响应时,由于连接已关闭,因此出现 tcp 错误。(可能我弄错了,另一个线程密切关注 tcp 连接和调用的状态thread.stop(Throwable),但 stop 已被弃用了一段时间。)

一种想法是向服务器发送一条消息,告诉它杀死来自同一会话的其他请求——但这需要积极参与您的服务器代码,可能在ServiceLayerDecorator子类型中通用,可能至少在invoke,loadDomainObject(s)getSetter,其中。这很明显是涉及要求 GWT 为您构建它......

于 2011-07-24T21:44:22.233 回答