リモートサーバーから取得してローカルに保存するために、ファイル名の小さな配列をループしています。このビットは正常に動作します。
問題は、ダウンロードが完了したときに次の関数を実行する必要があることです。
現在、私の関数は step2() と呼び、すべての FileStreams が終了する前に呼び出されます (実際、その関数が開始される前に呼び出されます!)
openAsynch を使用する場合、完全なイベント リスナーがあることを読みましたが、すべてのファイル (たとえば 3 つのリモート swfs) が書き込まれていることを確認してから、step2() 関数を開始する必要があります。
これについてどうすればよいですか?
以下のコード:
function onPlaylistComplete(e:Event)
{
var myArray:Array = new Array();
for each(var i in list_of_files)
{
myArray.push(i);
}
for(i = 0; i < myArray.length; i++)
{
swfItem = myArray[i];
var urlString:String = site_url + myArray[i];
var urlReq:URLRequest = new URLRequest(urlString);
var urlStream:URLStream = new URLStream();
urlStream.addEventListener(Event.COMPLETE, urlStreamComplete(swfItem));
urlStream.load(urlReq);
}
function urlStreamComplete(swfItem):Function
{
var downloadSwf:Function = function (event:Event):void {
var fileData:ByteArray = new ByteArray();
var stream = event.target;
stream.readBytes(fileData, 0, stream.bytesAvailable);
try {
var f : File = File.documentsDirectory.resolvePath(swfItem);
var fs : FileStream = new FileStream();
fs.addEventListener(Event.COMPLETE, fileCompleteHandler);
fs.openAsync(f, FileMode.WRITE);
fs.writeBytes(fileData);
}
catch (err : Error) {
trace(err.message);
}
}
return downloadSwf;
}
function fileCompleteHandler(e:Event):void {
e.target.close();
}
step2(); // this seems to run before UrlStreamComplete()
}