GWT回调实现



我正在维护包含许多用户组的软件。当管理员在组的用户上单击"删除"时,应该发生两件事:

  1. 删除组成员(涉及更新缓存,数据库等)
  2. 重新加载组成员列表(用户删除用户时,他会看到此列表)

事实证明,#2在#1-比赛状态之前结束。结果,我想添加一个回调,以便#2在#1成功之前才执行。

GWT可以接受此代码,以确保#2发生在#1?

之前。
 doTask1();
 GWT.runAsync(new RunAsyncCallback()
 {
   public void onFailure(final Throwable reason)
   {
   }
   public void onSuccess()
   {                       
     doTask2();
   }
 });

GWT#runAsync()用于GWT的"代码拆分"功能,该功能允许延迟加载代码(和其他运行时资源),直到需要它们为止。您需要使用GWT的异步操作模式(即asynccallback或命令)将回调传回doTask1(),一旦在那里完成了异步操作,该回调被调用。例如,如果doTask1()执行GWT RPC方法:

public void doTask1(final Command onCompletion) {
  myRpcService.doTask1(new AsyncCallback<Void>() {
    @Override
    public void onFailure(Throwable caught) {
      // Error handling
    }
    @Override
    public void onSuccess(Void ignored) {
      onCompletion.execute();
    }
  });
}
public void doTask2() {
  // Perform task 2
}
public void doTasks1And2() {
  doTask1(new Command() {
    @Override
    public void execute() {
      doTask2();
    }
  });
}

否,您仍然可以具有这种控制风格的种族条件。相反,您想要这样的东西:

doTask1(new MyCallback() {
    public void onTask1Complete() {
       doTask2();
    }
}

doTask1()需要接受回调,以便完成下一个操作后,它将执行下一个操作。

了解为什么,让我们假设doTask1()doTask2()都在调用HTTP调用。您无法保证服务器可能会收到这两个连接的订单,除非您等到doTask1()的请求返回。在您的示例代码中,您在doTask1()中提出请求(在请求时立即返回),然后在不等待第一个的情况下进行第二个调用。

最新更新