なぜの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
機能(常時動作するもの)ですか?もしそうなら、それは(あなたの例ではhttp://somesite.com/loadresult.php
が、私はそれが実際の生活の中でさまざまだと確信しています)同じURLでそれを呼び出すのですか?
これはhttp://somesite.com/loadresult.php
がフレーク状の資源であり、あなたの一貫性のない結果がそのリソースではなく、setTimeout
によるものである可能性があります。彼らは両方とも、同じリソースを使用している場合はもちろん、その後、それが問題になることができませんでした。
他のヒント
これが今まで問題がなくても、かなりの数回私は一般のsetTimeoutの問題を経験したことがない、と私はJSでメイン/無限ループのためにそれを使用しました。私はload_resultsの1回の呼び出しからてclearTimeoutは、それが次のsetTimeoutに周りを取得し、ブラウザを取るよりも時間がかかることがGET要求に応答します、特に以来、他からのsetTimeoutを踏んでいることを想像するだろう。実際にここで起こって複数のスレッドがありますが、あなたはちょうどそれらを制御することはできませんし、使用可能な同期化機構がありません。