私が約10秒ごとにサーバーから取得する必要のあるデータがあるとします。私は、AJAXを介してデータを取得する機能を持っているし、再度この関数を呼び出すためのsetTimeoutを呼び出します。再帰的な 'setTimeout'関数呼び出しは、最終的にJSエンジンを終了させますか?
function GetData(){
$.ajax({
url: "data.json",
dataType: "json",
success: function(data){
// do somthing with the data
setTimeout(GetData, 10000);
},
error: function(){
setTimeout(GetData, 10000);
}
});
}
誰かが終日オープンWebページを離れた場合、それは再帰関数呼び出しの何千ものを得ることができます。
ネットワーク遅延を考慮していないため、setIntervalは使用しません。ネットワークがビジーで、要求を処理するのに15秒かかる場合は、AJAXタイムアウトを取得する前に再質問する必要はありません。
定期的に呼び出す必要がある機能を処理する最善の方法は何ですか?
その後、GetDataを呼び出すと、互いに完全に独立した状態になります。 GetDataの実行が完了すると、コンテキストが破棄され、タイマーの期限が切れたときに新しいコンテキストが作成されます。 –
これはおそらく、クライアント側のJavaScriptの前にサーバーの問題を引き起こすでしょう。他の人が触れたように、setTimeoutは関数がスタックに戻り、スタックから削除されるため、コールスタックの問題はありません。アルゴリズム的に再帰しますが、実際には再帰しません。 – aepheus
この質問は私が研究しているものです。ここに持ってくれてありがとう。 – shaosh