ループでサービスを呼び出すときに引数を渡したい。問題は
1-次のコードのように匿名関数を使用する場合です。
for (var j:int = 0; j < listItems.length; j++)
{
_service.addEventListener(ResultEvent.RESULT, _anonymous = function(event:ResultEvent):void{
thumbnailResultHandler(event,listItems[k].ObjectID)
});
}
次に、thumbnailResultHandlerの実行を開始すると、j の最新の値がプッシュされ、listItems 配列の最新の値がプッシュされます。それらは非同期で動作しているためです。
2-次のオプションを使用して引数を渡す場合;
_anonymous = onClick(listItems[j].ObjectID,j);
_service.addEventListener(ResultEvent.RESULT, _anonymous);
forループで、ここにonClick関数があります
public function onClick(n:Number,k:Number):Function
{
_service.removeEventListener(ResultEvent.RESULT,_anonymous);
return function(event:ResultEvent):void
{
trace( count++) ;//traces 25 times but must be just 5.
}
}
次に、thumbnailResultHandler が実行されると、このメソッドは onClick 関数に値を渡してから、5 回ではなく 5x5 回動作する両方にアクセスします。
これは各 resultHandler で 1 回動作する必要がありますが、すべての結果で両方のパラメーターを読み取ります。
assume listItems.length = 5
この問題を解決するにはどうすればよいですか?