use*_*478 39 java gwt google-ajax-api
What is the best way to wait for multiple asynchronous callback functions to finish in Java before continuing. Specifically I'm using GWT with AsyncCallback, but I think this is a generic problem. Here's what I have now, but surely there is cleaner way...
AjaxLoader.loadApi("books", "0", new Runnable(){
public void run() {
bookAPIAvailable = true;
ready();
}}, null);
AjaxLoader.loadApi("search", "1", new Runnable(){
public void run() {
searchAPIAvailable = true;
ready();
}}, null);
loginService.login(GWT.getHostPageBaseURL(), new AsyncCallback<LoginInfo>() {
public void onSuccess(LoginInfo result) {
appLoaded = true;
ready();
}
});
private void ready() {
if(bookAPIAvailable && searchAPIAvailable && appLoaded) {
// Everything loaded
}
}
Run Code Online (Sandbox Code Playgroud)
thr*_*rop 41
我写了两个类来解决我的项目中的这个问题.基本上,每个单独的回调都向父母注册.父级等待每个子回调完成,然后触发它自己的handleSuccess().
客户端代码如下所示:
public void someGwtClientSideMethod() {
SomeServiceAsync someService = GWT.create(SomeService.class);
ParallelCallback fooCallback = new ParallelCallback();
ParallelCallback barCallback = new ParallelCallback();
ParentCallback parent = new ParentCallback(fooCallback, barCallback) {
public void handleSuccess() {
doSomething(getCallbackData(1), getCallbackData(2));
}
};
someService.foo(fooCallback);
someService.bar(barCallback);
}
Run Code Online (Sandbox Code Playgroud)
我在这里写了一篇文章解释它: GWT中的并行异步调用.这两个类的实现是从该帖子链接的(抱歉,这里不能给出链接,因为我是一个新手用户 - 没有足够的业力来包含多个链接!).
-
+1你需要业力,我给你一个,在这里你免费去! (4认同)
首先也是最重要的 - 永远不要陷入这种情况。重新设计您的 RPC 服务,使每个用户流/屏幕最多需要一次 RPC 调用才能工作。在这种情况下,您对服务器进行了三个调用,这只是浪费带宽。延迟只会杀死你的应用程序。
如果您不能并且确实需要破解,请使用计时器定期轮询所有数据是否已下载。您上面粘贴的代码假设login() 方法将是最后完成的 - 这是错误的。它可能是第一个完成的,然后你的应用程序将处于不确定状态 - 这非常难以调试。
归档时间: |
|
查看次数: |
26906 次 |
最近记录: |