1

ActionScript 3 の非同期イベントについて少し助けが必要です。2 つの関数を持つ単純なクラスを作成しています。どちらも文字列を返します (ロジックとコードは以下で概説されています)。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 に答える