RequestContext#fire()
的Javadoc只说:
流程部分下的发送与RequestContext关联的累积更改和方法调用。
GWT Moving Parts wiki entry仅表示:
- 所有累积的操作都将通过遍历代理的属性应用于域对象。
- 执行有效内容中的所有方法调用。
但是这些方法是否会在服务器端以与客户端ReqestContext
实例上“执行”(累积)相同的顺序执行?
对于我的情况,如果我在客户端执行:
context.persist().using(proxy)
context.find(proxy.stableId().to(updatingReceiver))
context.fire()
然后我可以确定在find()
之后将在服务器端persist()
调用,以便我的updatingReceiver
将获得更新的(persist()
'ed)实体的代理参数
编辑:
更进一步,我可以确定在响应Reciever
之后将以与其相应方法累积完全相同的顺序调用客户端吗?
最后,有没有办法在所有Receiver
个动作之后添加一些将在响应处理结束时调用的动作?
我认为这样的事情可能有用:
requestContext.fire(new Receiver<Void>() {
@Override
public void onSuccess(Void response) {
//Things to do after all receivers
});
它似乎真的像我预期的那样工作,但因为Javadoc告诉我关于RequestContext.fire(Receiver)
方法的所有内容是:
仅用于接收错误或验证失败。
我不能100%确定我的假设是否正确。
答案 0 :(得分:2)
是的,在调用Reciever
时,方法调用的顺序在服务器端保留,然后在客户端返回。
队列是一个简单的ArrayList
,其中附加了调用对象。在服务器端,它们按照收到的顺序进行处理。
Request-Context
- 级 Receiver
始终在调用之后调用。始终调用其onSuccess
,无论调用的结果如何(即使它们都失败),都表示已成功处理批量调用。其onFailure
仅在一般故障的情况下被调用,即网络错误,或在服务器端(de)序列化请求/响应时出错。
见http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/web/bindery/requestfactory/shared/impl/AbstractRequestContext.java?r=10835#345