これを頻繁に実行すると(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();
}
null値が必要な場合は、代わりにブール型変数を使用して結果ハンドラの呼び出しを追跡できます。
EDIT:著者はディスパッチが別のクラスに起こることが示されたので、それを行うための別の方法は、レスポンダに沿って通過し、(被呼者に)のでよう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