Giả sử tôi có một số dữ liệu mà tôi cần nhận được từ máy chủ khoảng 10 giây một lần. Tôi sẽ có một chức năng mà được các dữ liệu thông qua AJAX và sau đó gọi setTimeout để gọi chức năng này một lần nữa:Cuộc gọi hàm 'setTimeout' đệ quy có thể hủy diệt JS Engine không?
function GetData(){
$.ajax({
url: "data.json",
dataType: "json",
success: function(data){
// do somthing with the data
setTimeout(GetData, 10000);
},
error: function(){
setTimeout(GetData, 10000);
}
});
}
Nếu ai đó rời khỏi trang web mở cửa cả ngày, nó có thể nhận được hàng ngàn cuộc gọi hàm đệ quy.
Tôi không muốn sử dụng setInterval vì điều đó không tính đến độ trễ mạng tài khoản. Nếu mạng đang bận và phải mất 15 giây để xử lý yêu cầu, tôi không muốn hỏi lại lần nữa trước khi tôi hết thời gian chờ AJAX.
Cách tốt nhất để xử lý một hàm cần được gọi định kỳ là gì?
Mỗi cuộc gọi tiếp theo tới GetData sẽ hoàn toàn độc lập với nhau. Sau khi bất kỳ hoạt động thực thi GetData nào được hoàn thành, ngữ cảnh của nó sẽ bị hủy và một bối cảnh mới được tạo khi bộ đếm thời gian hết hạn. –
điều này có thể gây ra sự cố cho máy chủ trước JavaScript phía máy khách. như những người khác đã đề cập, bạn không có một vấn đề ngăn xếp cuộc gọi vì setTimeout cho phép hàm trả về và được loại bỏ khỏi ngăn xếp. Đệ quy về mặt thuật toán, nhưng không thực sự. – aepheus
Câu hỏi này chính xác là những gì tôi đang nghiên cứu. Cảm ơn bạn đã mang nó đến đây. – shaosh