在Flex中远程调用后调用函数

时间:2011-01-31 06:04:26

标签: flex

我在Flex中有一个函数,它有三个函数。

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

在A()和B()从调用中返回并设置特定变量后,我不想调用C()。我怎么能这样做?

1 个答案:

答案 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。