1

我需要一些关于 ActionScript 3 中的异步事件的帮助。我正在编写一个简单的类,它有两个函数,这两个函数都返回字符串(逻辑和代码如下所述)。由于 AS3 HTTPService 的异步特性,总是在从服务返回结果之前到达返回值行,从而产生一个空字符串。是否可以在此函数中包含某种类型的逻辑或语句,使其在返回值之前等待响应?有没有处理这类东西的框架?

  1. 呼叫服务
  2. 解析 JSON 结果,隔离感兴趣的值
  3. 返回值

    public function geocodeLocation(address:String):Point
    {
        //call Google Maps API Geocode service directly over HTTP
        var httpService:HTTPService = new HTTPService;
        httpService.useProxy = false;
        httpService.url = //"URL WILL GO HERE";
        httpService.method = HTTPRequestMessage.GET_METHOD;
        var asyncToken : AsyncToken = httpService.send();
        asyncToken.addResponder( new AsyncResponder( onResult, onFault));
    
        function onResult( e : ResultEvent, token : Object = null ) : void
        {
            //parse JSON and get value, logic not implemented yet
            var jsonValue:String=""
        }
    
        function onFault( info : Object, token : Object = null ) : void
        {
            Alert.show(info.toString());
        }
    
        return jsonValue; //line reached before onResult fires
    }
    
4

1 回答 1

2

你应该在你的应用程序中定义 onResult 和 onFault——无论你在哪里调用geocodeLocation——然后将它们作为参数传递到你的函数中。您的onResult函数将接收数据、解析 Point 并对其进行处理。你的geocodeLocation函数不会返回任何东西。

public function geocodeLocation(address:String, onResult:Function, onFault:Function):void
{
    //call Google Maps API Geocode service directly over HTTP
    var httpService:HTTPService = new HTTPService;
    httpService.useProxy = false;
    httpService.url = //"URL WILL GO HERE";
    httpService.method = HTTPRequestMessage.GET_METHOD;
    var asyncToken : AsyncToken = httpService.send();
    asyncToken.addResponder( new AsyncResponder( onResult, onFault));
}

然后在您的应用程序某处:

function onResult( e : ResultEvent, token : Object = null ) : void
{
    var jsonValue:String=""
    //parse JSON and get value, logic not implemented yet
    var point:Point = new Point();
    //do something with point
}

function onFault( info : Object, token : Object = null ) : void
{
    Alert.show(info.toString());
    //sad face
}

var address:String = "your address here";
geocodeLocation(address, onResult, onFault);

当 Web 服务响应时,控制权将传递给您的 onResult 函数,您将在其中解析 Point 并使用它做一些有用的事情,或者传递给您的 onFault 函数。

顺便说一句,您可能会遇到以这种方式调用 Google 地图地理编码器的问题,最好使用官方 SDK 并利用他们的代码:http ://code.google.com/apis/maps/documentation/flash/services.html

于 2009-11-22T20:18:41.950 回答