2011-01-31 5 views
0

Flex에는 세 가지 기능이있는 함수가 있습니다.Flex에서 원격 호출 후 함수 호출

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

난) 후의 C() 모두 A() 및 B를 (자신의 전화 호출로부터 돌아온 특히 변수를 설정 wan't. 내가 어떻게 할 수 있니?

답변

0

이 작업을 자주 수행하는 경우 (특히 두 개 이상의 원격 호출이있는 경우) 원격 호출에서 AsyncTokens를 처리하는 고유 한 사용자 정의 클래스를 작성하여 모든 result() 함수가 호출 될 때 호출되는 final 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 값이 필요한 경우 부울 변수를 사용하여 대신 결과 핸들러 호출을 추적 할 수 있습니다.

편집 : 저자가 파견가 다른 클래스에서 일어나는 것으로 나타났다 때문에, 다른 방법으로는 응답자를 따라 통과 (호출 수신자에) 그래서 같은 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)와 같은 글로벌 이벤트 라우팅 (global event routing)을하는 프레임 워크가 있는지 살펴볼 수도 있습니다.

+0

그러나 내 결과 처리기가 다른 클래스에 있으며 일부 값을 설정합니다. – fR0DDY