如何立即获取RemoteObject的结果?

时间:2011-04-29 17:36:17

标签: flex return remoteobject

我需要创建一个执行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;
    }

但是函数返回null,因为在main函数结束时没有调用valresult()。我做了什么让FKDescription()返回来自remoteobject的字符串?

坦克。

2 个答案:

答案 0 :(得分:2)

那是因为HTTP调用是异步的,所以你必须得到结果。你想要做的是将结果处理程序移除到它自己的函数,以便它等待结果,然后用它做一些事情。 可以做你现在想要完成的事情,这就是立即返回价值。

检查here on how to do async calls

答案 1 :(得分:1)

正如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);