Программирование синхронных вызовов веб-сервисов на flex - PullRequest
0 голосов
/ 19 августа 2009

Вызовы веб-службы являются асинхронными в flex, но я хотел обернуть вызов веб-службы в класс, чтобы обеспечить синхронную инкапсуляцию. Примерно так: пользователь может вызвать getMyMethodResult и получить результат, возвращаемый веб-сервисом. Я ожидал, что поток, получивший ответ мыла, заполнит переменную _result и будет означать, что через некоторое время getMyMethod обнаружит, что _result больше не равен нулю. Но это не так! Кто-нибудь может объяснить, почему это не работает?

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 Ответ

1 голос
/ 19 августа 2009

Это абсолютно не поддерживается. Цикл обработки событий выполняется между кадрами, и пока вы блокируете выполнение с помощью (бесконечного) цикла, ваша функция myMethodListener не будет вызываться. В любом случае, это было бы ужасной идеей, поскольку отсутствие многопоточности во Flash Player приведет к зависанию вашего пользовательского интерфейса, пока вы ожидаете возвращения службы. Вы должны просто отбросить эту идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...