我正在查詢XML文檔中列出的電影的Rotten Tomatoes API。我遇到的問題是,whist迭代並查詢每個電影,我正在觸及RT的API限制,而這反過來又會引發IO錯誤。AS3延遲執行?
有沒有一種方法可以延遲執行循環約一秒左右,以避免這種情況?
我正在查詢XML文檔中列出的電影的Rotten Tomatoes API。我遇到的問題是,whist迭代並查詢每個電影,我正在觸及RT的API限制,而這反過來又會引發IO錯誤。AS3延遲執行?
有沒有一種方法可以延遲執行循環約一秒左右,以避免這種情況?
簡答題:請使用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中,那麼計時器將不會有幫助。這將花費太長時間,並給人一種糟糕的體驗。假設用戶有一個快速連接,但仍然需要等待每個文件的延遲。我要做的是檢查以確保在移動到下一個文件之前已經加載了一個文件(loadBytes)。你只需要做到這一點,每個節點中包含的最大文件就足夠了。
這將更靈活地依賴於用戶連接。