我有一个从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)的值在移动到下一行之前实际返回一个值?
答案 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无法阻塞等待结果 - 你必须添加一个监听器并等待通知。