为什么setTimeout的如此善变和半功能?
-
22-09-2019 - |
题
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永远奏效设置其他功能。
想法?
解决方案
是其他setTimeout
功能(就是那个总是工作)也是一个$.getJSON
里面?如果是这样,那么它称之为同一URL(在你的榜样http://somesite.com/loadresult.php
,但我敢肯定它在现实生活中不同)?
这有可能是http://somesite.com/loadresult.php
是片状的资源,和你不一致的结果到资源,不setTimeout
到期。当然,如果他们使用同样的资源都,那么就可能不会是问题。
其他提示
我从来没有经历过的setTimeout问题一般,没有它曾经有一个问题我已经使用了主/无限循环的JS好几次。我可以想象clearTimeout从load_results的一个调用上的setTimeout从另一个加强,特别是因为它在回应可能需要更长的时间比它采用浏览器来解决下一个setTimeout的GET请求。实际上有多个线程会在这里,你只需要在他们身上没有控制,没有可用的同步机制。
不隶属于 StackOverflow