【问题标题】:AS3 Delay execution?AS3 延迟执行?
【发布时间】:2014-09-25 03:56:13
【问题描述】:

我正在 Rotten Tomatoes 的 API 中查询 XML 文档中列出的电影。我遇到的问题是,遍历并查询我达到 RT 的 API 限制的每部电影,这反过来又会引发 IO 错误。

有没有办法可以在循环中延迟执行大约一秒钟左右,以避免这种情况?

【问题讨论】:

    标签: actionscript-3 rotten-tomatoes


    【解决方案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();
    }
    

    【讨论】:

      【解决方案2】:

      您从导致错误的 xml 加载什么? XML 应该不会花费很长时间来加载。如果您的加载项包含在 xml 中,那么计时器将无济于事。这将花费太长时间并且会带来糟糕的体验。假设用户有一个快速连接,但仍然需要等待每个文件的延迟。我要做的是检查以确保在移动到下一个文件之前我已经加载了一个文件(loadBytes)。您只需要对每个节点中包含的最大文件执行此操作就足够了。

      这将更灵活地依赖于用户的连接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-25
        • 2018-02-25
        • 2011-09-23
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2013-06-19
        相关资源
        最近更新 更多