Apache flex 在flex中编程同步web服务调用

Apache flex 在flex中编程同步web服务调用,apache-flex,Apache Flex,Web服务调用在flex中是异步的,但我想将Web服务调用封装在类中以提供同步封装。类似于下面的内容-用户可以调用getMyMethodResult并获取web服务返回的结果。我希望接收soap响应的线程将填充变量_result,这意味着getMyMethod将在一段时间后发现_result不再为null。但事实并非如此!有人能解释为什么这不起作用吗 public class myClass { private var _result:Object; public func

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;
    }
}

绝对没有人支持这一点。事件循环在帧之间运行,只要使用(无限)循环阻止执行,就不会调用myMethodListener函数。无论如何,这将是一个可怕的想法,因为Flash Player中缺少线程将导致您的UI在等待服务返回时冻结。你应该放弃这个想法。

谢谢你的回复。我还是不明白;我以为他们在不同的线程中运行?flash player如何处理异步返回(如果不是由其他线程处理)?如果事件循环正在处理所有事情,您能解释一下这些任务的执行顺序吗?谢谢,我很高兴“放弃这个想法”,我只是想知道为什么它不起作用,这样我才能更好地理解flash player/flex的操作方式。我是flex的新手!当flash player收到这样的事件时,它不会中断您的代码执行。如果我没弄错的话,它会一直等到下一帧。播放器的后台实现可能使用一个线程来完成这项工作,但会对事件进行排队,以便actionscript只在一个线程上执行。