Как получить результат RemoteObject немедленно? - PullRequest
0 голосов
/ 29 апреля 2011

Мне нужно создать функцию, которая будет выполнять метод Java и возвращать его результат.Он статичен, потому что многие другие функции будут вызывать эту функцию.Итак, я сделал это:

        public static function FKDescription(dest:String):String{
        var jRemote:RemoteObject = new RemoteObject();
        var s:String;
        jRemote.destination = dest;
        jRemote.getValues.addEventListener(ResultEvent.RESULT,valresult);
        jRemote.getValues();

        function valresult(event:ResultEvent):void{
            s = event.result as String;
        }

        return s;
    }

Но функция возвращает ноль, потому что valresult () не был вызван в конце основной функции.Что я должен сделать, чтобы FKDescription () возвращал строку, полученную из удаленного объекта?

Танки.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Это потому, что HTTP-вызовы являются асинхронными, поэтому вы должны найти результат.То, что вы хотите сделать, это удалить обработчик результата в свою собственную функцию, чтобы он ожидал результата, а затем что-то с ним делал. НЕ возможно сделать то, что вы пытаетесь выполнить прямо сейчас, что сразу возвращает значение.

Проверьте здесь как выполнять асинхронные вызовы .

1 голос
/ 30 апреля 2011

Как сказал J_A_X, все http-запросы являются асинхронными, я предлагаю реорганизовать ваш код следующим образом:

public static function FKDescription(dest:String, callback:Function):String{
    var jRemote:RemoteObject = new RemoteObject();
    var s:String;
    jRemote.destination = dest;
    jRemote.getValues.addEventListener(ResultEvent.RESULT,valresult);
    jRemote.getValues();

    function valresult(event:ResultEvent):void{
        callback(event.result as String);
    }
}

и в звонилке вместо:

 ret = FKDescription("something");
 otherFunction(ret);

Вы можете сделать это:

FKDescription("something", otherFunction);
...