2011-01-31 69 views
0

我在Flex中有一个函数,它有三个函数。远程调用Flex后调用函数

public function update():void 
{ 
    A(); \\Dispatches a event with Remote Call 
    B(); \\Dispatches another event with Remote Call 
    C(); 
} 

我wan't调用后C()都A()和B()从他们的呼叫已经返回并设置特定变量。我怎样才能做到这一点?

回答

0

如果你发现自己(尤其是超过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。

+0

但我的结果处理程序是在不同的类,他们在那里设置一些值。 – fR0DDY 2011-01-31 06:47:39