我正在查询 Rotten Tomatoes 的 API 以获取 XML 文档中列出的电影。我遇到的问题是,whist 遍历并查询我达到 RT 的 API 限制的每部电影,而这反过来又会引发 IO 错误。
有没有办法可以在循环中延迟执行大约一秒钟左右,以避免这种情况?
我正在查询 Rotten Tomatoes 的 API 以获取 XML 文档中列出的电影。我遇到的问题是,whist 遍历并查询我达到 RT 的 API 限制的每部电影,而这反过来又会引发 IO 错误。
有没有办法可以在循环中延迟执行大约一秒钟左右,以避免这种情况?
简短的回答:使用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)。您只需要对每个节点中包含的最大文件执行此操作就足够了。
这将更灵活地依赖于用户连接。