假設我每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);
}
});
}
如果有人離開網頁全天開放,它可以讓成千上萬的遞歸函數調用。
我不想使用setInterval,因爲它沒有考慮到網絡延遲。如果網絡繁忙,處理請求需要15秒,我不想在AJAX超時之前再次提問。
處理需要定期調用的函數的最佳方法是什麼?
對GetData的每個後續調用都將完全獨立於對方。任何給定的GetData執行運行完成後,其上下文將被銷燬,並在計時器到期時創建新的上下文。 –
這可能會導致服務器在客戶端JavaScript之前出現問題。正如其他人所提到的那樣,您沒有調用堆棧問題,因爲setTimeout允許函數返回並從堆棧中移除。遞歸算法,但不是實際。 – aepheus
這個問題正是我正在研究的問題。感謝您將它帶到這裏。 – shaosh