我正在查询烂番茄的API,以查找XML文档中列出的电影。我遇到的问题是,whist迭代并查询每部电影我正在达到RT的API限制,这反过来又会引发IO错误。
有没有办法可以在一个循环中延迟执行大约一秒左右,以避免这种情况?
答案 0 :(得分: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();
}
答案 1 :(得分:0)
您从xml加载的是什么导致错误?加载XML不需要很长时间。如果您的加载项包含在xml中,则计时器将没有用处。这将花费太长时间并给出糟糕的体验。假设用户具有快速连接,但仍需要等待每个文件的延迟。我要做的是检查以确保在移动到下一个文件之前我已经加载了一个文件(loadBytes)。你只需要用每个节点中包含的最大文件就足够了。
这将更灵活地依赖于用户连接。