【发布时间】:2012-10-13 16:38:25
【问题描述】:
在客户端使用 gwt 时,通常会调用异步方法并在回调方法中进行处理。
asyncService.method(new AbstractAsyncCallback<Number>() {
@Override
public void onSuccess(Number num) {
// do something with number
}
});
但经常遇到需要从一个异步方法获取结果、传递给另一个方法等情况。这就是为什么我们会得到脏的级联代码,很难阅读。
asyncService.method(new AbstractAsyncCallback<Number>() {
@Override
public void onSuccess(Number num) {
asyncService.method1(num, new AbstractAsyncCallback<String>() {
@Override
public void onSuccess(String str) {
asyncService.method2(str, new AbstractAsyncCallback<Void>() {
@Override
public void onSuccess(Void void) {
// do something
}
});
}
});
}
});
我知道,我们可以将服务器端的这三个调用组合成单独的服务方法,但是如果我们需要很多这样的不同方法的组合呢?另一个问题是添加单独的方法,它执行我们可以通过简单组合现有方法获得的功能。
是否有一个通用的模式可以摆脱此类代码而不更改服务器端服务?
【问题讨论】:
-
恕我直言,您的问题还应包括
onFailure方法 -
@Jean-MichelGarcia
onFailure为简单起见省略。顺便说一句,AbstractAsyncCallback有它的默认实现。
标签: java design-patterns gwt asynchronous