为什么setTimeout如此易变和半功能?

时间:2010-01-02 18:07:15

标签: javascript jquery settimeout

function load_result()
{
    $.getJSON( "http://somesite.com/loadresult.php", function(data) {
        if( data == undefined || data == null )
        {
            console.log( "no data" );
            clearTimeout( lr_timeout );
            lr_timeout = setTimeout( "load_result()", 2000 );
            return;
        }
        insert_result_price( data );
        clearTimeout( lr_timeout );
        lr_timeout = setTimeout( "load_result()", 50 * ( Math.random() * 10 ) );

    } );
}

lr_timeout是全局定义的,load_result函数最初在document.ready函数中启动。问题是该功能并不总是运行。我将在Firebug中观看它,并且我在setInterval上设置了另一个始终有效的函数。

想法?

2 个答案:

答案 0 :(得分:1)

您的其他setTimeout功能(始终有效的功能)是否也位于$.getJSON内?如果是这样,它是否在相同的网址上调用它(在您的示例中为http://somesite.com/loadresult.php,但我确定它在现实生活中有所不同)?

http://somesite.com/loadresult.php可能是一个片状资源,而您的不一致结果是由该资源引起的,而不是setTimeout。当然,如果他们都使用相同的资源,那么这可能不是问题。

答案 1 :(得分:0)

我从来没有经历过setTimeout的问题,而且我已经将它用于JS中的主/无限循环很多次而没有遇到问题。我可以想象,一次调用load_results的clearTimeout正在从另一个调用setTimeout,特别是因为它响应的GET请求可能需要比浏览器更长时间到达下一个setTimeout所需的时间。实际上这里有多个线程,你无法控制它们,并且没有可用的同步机制。