Вызов функции после удаленного вызова в Flex - PullRequest
0 голосов
/ 31 января 2011

У меня есть функция во Flex, в которой есть три функции.

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

Я не хочу вызывать C () после того, как A () и B () вернулись из своего вызова и установили определенные переменные. Как я могу это сделать?

1 Ответ

0 голосов
/ 31 января 2011

Если вы обнаружите, что делаете это часто (особенно с более чем 2 удаленными вызовами), вы можете написать свой собственный класс, который обрабатывает AsyncTokens от удаленных вызовов, с функцией final (), которая вызывается при всех удаленных вызовах.конец в успехе.

Если нет, так как 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...