XMLドキュメントにリストされている映画のRottenTomatoesのAPIをクエリしています。私が抱えている問題は、各映画を繰り返してクエリを実行し、RTのAPI制限に達しており、IOエラーがスローされていることです。
これを回避するために、ループ内の実行を約1秒ほど遅らせる方法はありますか?
XMLドキュメントにリストされている映画のRottenTomatoesのAPIをクエリしています。私が抱えている問題は、各映画を繰り返してクエリを実行し、RTのAPI制限に達しており、IOエラーがスローされていることです。
これを回避するために、ループ内の実行を約1秒ほど遅らせる方法はありますか?
簡単な答え: を使用しTimerます。
配列に 100 個の映画があるとします。
var movies:Array;
そして、これらの映画ごとに、サーバーで API を呼び出す必要があります。まず、現在のムービーをマークする変数を維持します。
var currentMovieIndex:int = 0; // first movie
次に、URLLoader を使用していると仮定します。
private function makeAPICall():void
{
// Construct URLRequest based on current movie object.
var urlRequest:URLRequest = getURLRequest(movies[currentMovieIndex]);
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener("complete", completeHandler);
urlLoader.load(urlRequest);
}
getURLRequest()URLRequest引数として渡すムービーのオブジェクトを提供する関数です。
あなたのcompleteHandler():
private function completeHandler(event:Event):void
{
...
if (++currentMovieIndex < 100) {
var timer:Timer = new Timer(3000, 1); // 3-second delay
timer.addEventListener("timer", timerHandler);
timer.start();
}
}
あなたのtimerHandler():
private function timerHandler(event:Event):void
{
makeAPICall();
}
エラーの原因となっている xml から何を読み込んでいますか? XML の読み込みに時間がかかることはありません。xml に含まれるアイテムをロードする場合、タイマーは役に立ちません。時間がかかりすぎて、悪い経験になります。ユーザーの接続は高速ですが、各ファイルの遅延を待つ必要があるとします。私がすることは、次のファイルに移動する前に、1 つのファイル (loadBytes) をロードしたことを確認することです。各ノードに含まれる最大のファイルでこれを行うだけで十分です。
これは、ユーザーの接続により柔軟に依存します。