在flex中编程同步Web服务调用

时间:2009-08-19 14:30:43

标签: flex

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

1 个答案:

答案 0 :(得分:1)

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