flex 3 получает вызов веб-службы для ожидания результата - PullRequest
2 голосов
/ 23 января 2009

У меня есть функция, которая извлекает значения из веб-службы, затем перебирает возвращаемые значения и для каждого возвращаемого значения выполняет другой поиск в веб-службе.

У меня, однако, проблема в том, что когда я выполняю второй вызов веб-службы в цикле for, функция не ждет повторного выполнения, а просто продолжает обработку и, в свою очередь, не дает мне значения

код выглядит так;

    private function getResult(e:ResultEvent):void{

   var lengthOfResult:int = e.result.length;
   var arrayCollResults:ArrayCollection = new ArrayCollection();
   var resultArray:Array = new Array(e.result);

       for(var i:int = 0 ; i < lengthOfResult; i++){
      var currentName:String = e.result[i].toString();
      arrayCollResults.addItem(e.result[i] + ws.getMatches(currentName)); 
   }

   acu.dataProvider = arrayCollResults;
   }

что я могу сделать, чтобы убедиться, что значение ws.getMatches (currentName) действительно возвращает значение перед переходом к следующей строке?

Ответы [ 2 ]

2 голосов
/ 23 января 2009

Документация здесь указывает на то, что вы не вызываете Web-сервис напрямую, вам нужно настроить прослушиватель событий и обработать ответ о завершении доставки.

Из раздела «Вызов веб-сервисов в ActionScript»:

<?xml version="1.0"?>
<!-- fds\rpc\WebServiceInAS.mxml --> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
        <![CDATA[
        import mx.rpc.soap.WebService;
        import mx.rpc.events.ResultEvent;
        import mx.rpc.events.FaultEvent;
        private var ws:WebService;
        public function useWebService(intArg:int, strArg:String):void {
            ws = new WebService();
            ws.destination = "echoArgService";
            ws.echoArgs.addEventListener("result", echoResultHandler);
            ws.addEventListener("fault", faultHandler);
            ws.loadWSDL();
            ws.echoArgs(intArg, strArg);
        }

        public function echoResultHandler(event:ResultEvent):void {
            var retStr:String = event.result.echoStr;
            var retInt:int = event.result.echoInt;
         //Do something.
        }

        public function faultHandler(event:FaultEvent):void {
      //deal with event.fault.faultString, etc
        }
        ]]>
    </mx:Script>
</mx:Application>

Поместите сегмент "arrayCollResults.addItem (...)" в обработчик результатов для вашего события ws.getMatches ().

1 голос
/ 23 января 2009

Насколько мне известно, flex / as3 не может блокировать ожидание результата - вы должны добавить прослушиватель и дождаться уведомления.

...