flex 3获取Web服务调用以等待结果

时间:2009-01-23 10:15:26

标签: web-services flex

我有一个从webservice中检索值的函数,然后遍历返回的值,并为每个返回的值执行另一个webservice查找。

我有一个问题但是,当我在for循环中进行第二次webservice调用时,函数不会等待reuslt并且只是继续处理而反过来给我没有值

代码看起来像这样;

    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 个答案:

答案 0 :(得分:2)

文档here表示您不直接调用Web服务,您需要设置事件侦听器并处理完成传递的响应。

“在ActionScript中调用Web服务”部分:

<?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 :(得分:1)

据我所知flex / as3无法阻塞等待结果 - 你必须添加一个监听器并等待通知。