如果你发现自己(尤其是超过2个远程调用),您可能要编写处理从远程调用AsyncTokens有最终的结果是()调用函数自己的自定义类经常这样做时,所有远程通话成功结束。
如果不是,由于ActionScript是单线程的,因此您可以使用局部变量来跟踪这两个调用是否成功。
private var resultFromRemoteCallA:Object;
private var resultFromRemoteCallB:Object;
private function handleRemoteCallA(event:ResultEvent):void {
resultFromRemoteCallA = event.result;
C();
}
private function handleRemoteCallB(event:ResultEvent):void {
resultFromRemoteCallB = event.result;
C();
}
private function C():void {
if (resultFromRemoteCallA && resultFromRemoteCallB) {
// do some thing with the results.
}
}
private function update():void {
resultFromRemoteCallA = resultFromRemoteCallB = null;
A(); B();
}
如果您期待空值,您可能希望使用布尔变量来追踪调用结果处理程序。
编辑:由于撰文指出,派遣发生在另一个类,另一种方式来做到这将是沿着响应者传递,并将其附加到AsyncToken像这样(在被调用者):
private function dispatchRemoteCall(resultHandler:Function, faultHandler: Function): void {
var resultToken: AsyncToken = remoteObject.foo('bar'); // remoteObject may or may not have a result/fault handler
resultToken.addResponder(new mx.rpc.Responder(resultHandler, faultHandler));
}
然后,您可以沿着听众传递到被调用时,远程调用完成(在这一点上,你可以选择让调度类商店的结果或于呼叫处理它),像这样:
private function update(): void {
classA.dispatchRemoteCall(handleRemoteCallA, handleRemoteCallAFault);
}
如果你发现自己做了很多事情,你可能也想看看有一个框架做全局事件路由,比如Parsley或者Spring Actionscript。
但我的结果处理程序是在不同的类,他们在那里设置一些值。 – fR0DDY 2011-01-31 06:47:39