我在Flex中有一个函数,它有三个函数。
public function update():void
{
A(); \\Dispatches a event with Remote Call
B(); \\Dispatches another event with Remote Call
C();
}
在A()和B()从调用中返回并设置特定变量后,我不想调用C()。我怎么能这样做?
答案 0 :(得分:0)
如果你发现自己经常这样做(特别是超过2个远程调用),你可能想编写自己的自定义类来处理来自远程调用的AsyncTokens,并使用最终result()函数在所有远程调用时调用结束了。
如果没有,由于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。