0
Web服务调用在flex中是异步的,但我想在一个类中封装Web服务调用以提供同步封装。像下面这样 - 用户可以调用getMyMethodResult并获取Web服务返回的结果。我预计收到soap响应的线程会填充变量_result,并且意味着getMyMethod在一段时间后会发现_result不再为空。但它不!任何人都可以解释为什么这不起作用?在flex中编程同步Web服务调用
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;
}
}
感谢您的回复。 我还是不明白;我以为他们在不同的线程中运行?如果不是由不同的线程处理异步返回,Flash播放器如何处理?如果事件循环处理所有事情,你能否解释这些任务的执行顺序?谢谢 – 2009-08-19 15:30:30
顺便说一句,我很高兴“放弃这个想法”,我只是想知道为什么它不起作用,所以我可以更好地理解flash播放器/ flex的操作方式。我新来flex! – 2009-08-19 15:31:55
Flash Player在接收到类似事件时不会中断您的代码执行。如果我没有弄错,它会等到下一帧。播放器的后台实现可能使用线程来完成,但将事件排队,以便动作只在一个线程上执行。 – sharvey 2009-08-19 15:42:39