Web服务调用在flex中是异步的,但我想在类中包装Web服务调用以提供同步封装。类似下面的内容 - 用户可以调用getMyMethodResult并获取Web服务返回的结果。我预计接收到soap响应的线程将填充变量_result并且意味着getMyMethod会在一段时间后发现_result不再为null。但事实并非如此!任何人都可以解释为什么这不起作用?
public class myClass
{
private var _result:Object;
public function myClass()
{
//create a web service object
...
// Add listener
_service.addMyMethodListener(myMethodListener);
}
public function getMyMethodResult()
{
_service.myMethod();
while (_result == null)
{
// count a variable or something (unimportant)
}
return _result;
}
private function myMethodListener(event:Event):void
{
_result = event.result;
}
}
答案 0 :(得分:1)
绝对不支持。事件循环在帧之间运行,只要您使用(无限)循环阻止执行,就不会调用myMethodListener函数。无论如何,这将是一个糟糕的主意,因为Flash Player中没有线程会导致您的UI在等待服务返回时冻结。你应该放弃这个想法。