2011-01-31 2 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() после как А() и В() вернулись из их вызова и установить определенные переменные. Как я могу это сделать?

ответ

0

Если вы часто это делаете (например, более двух удаленных вызовов), вы можете написать собственный пользовательский класс, который обрабатывает AsyncTokens из удаленных вызовов с помощью функции 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(); 
} 

Если вы ожидаете, нулевые значения, вы можете использовать логическую переменную для отслеживания вызова обработчика результата вместо этого.

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.

+0

Но мой результат Обработчики находятся в разных классах, и они устанавливают там некоторые значения. – fR0DDY

Смежные вопросы