假设我每隔10秒就需要从服务器获取一些数据。我将有一个函数通过AJAX获取数据,然后调用setTimeout再次调用此函数:
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超时之前再次询问它。
处理需要定期调用的函数的最佳方法是什么?
答案 0 :(得分:23)
没有实际的递归,因为在此期间对GetData的调用被延迟并且JavaScript上下文被销毁。所以它不会使JS引擎崩溃。
对于您的代码示例,这基本上是JS引擎级别会发生的事情: