私は、Actionscriptで非同期待機に関するいくつかのことを読んだことがありますが、実際にはそれを実際に行うことはできません。Actionscriptでの非同期操作
private function getXML():void {
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, loadXML);
xmlLoader.load(new URLRequest("test.xml"));
}
private function loadXML(evt:Event):void {
var xmlData:XML = new XML(evt.target.data);
this.parseResults(xmlData);
}
private function parseResults(resultsInput:XML):void {
this.text = resultsInput.Node.attributes()[0];
}
イベントを発生し、その後text
変数クラスのノードへの最初の属性を投稿して行わときには、標準のget XMLです:ここで私はクラスを持っている私のコードの短い、簡略化されたバージョンです。
私はこれを呼び出したい関数です。問題は、getXMLを以下の処理ステップは、()イベントは、火をロードし、その後に保存することができますより速く実行されるため、私はいつもNot a circle in the node
を取得している
// assume doSomething("circle") was called
private function doSomething(shape:String):String {
this.getXML();
if (this.text == shape) {
// draw circle
return "Drew circle";
} else {
return "Not a circle in the node";
}
}
チェックされるべきクラス変数。私は、匿名関数の使用から状態の使用や状態へのリスナーの追加など、すべてを読みましたが、正しく実装することはできません(または正しく実装する方法を理解できませんでした)。どのように私は上記のコードでこれを行うのだろうか?
私が試したし、働いていないもの:
はgetXMLを関数の変数を宣言()ので、XMLは
var f:Function = function loadXML(evt:Event):void {... etc.
then calling f in getXML
を読み取られるまで機能が実行されることはありませんがありません仕事、私は状態変数xmlLoaderState
in getXML()
if (this.xmlLoaderState == "waiting") {
this.xmlLoaderState = "busy";
}
in parseResults at the end
this.xmlLoaderState = "waiting"
then in doSomething()
while (this.xmlLoaderState == "busy") {}
に宣言makethis仕事
にActionScriptでの関数の変数を呼び出すするかどうかはわかりません0
この無限ループは、ループがxmlLoaderをブロックするようにスレッドが1つしかないので、私はそれを推測しています。
私はそれを見ました。彼は何らかの理由でそれを削除しました。しかし、その関数に渡された引数をどうすれば処理できますか?私の最初の関数呼び出しはdoSomething関数ですが、私が信じるカスタムCOMPLETEイベントを書かずにそれらの引数を渡す方法はありません。 – NorthGuard