Giả sử tôi muốn gửi một yêu cầu AJAX không đồng bộ với máy chủ, và khi nó đáp ứng gửi một yêu cầu khác và lặp lại mãi mãi:vòng lặp vô hạn với mô hình gọi lại không đồng bộ trong javascript
function sendXHR(url, callback) {
// Send XMLHttpRequest to server and call callback when response is received
}
function infinite() {
sendXHR('url/path', infinite);
}
infinite();
tôi giả sử ở đây chúng tôi sẽ chạy ra khỏi ngăn xếp không gian khá nhanh chóng, vậy làm thế nào tôi có thể làm điều này (mà không bị chặn)?
Mẫu chuyển cuộc gọi lại xung quanh thay vì sử dụng return
đặc biệt phổ biến với node.js
. Mọi người tạo vòng lặp vô hạn như thế nào? Tôi không tin rằng hầu hết các động cơ JS làm bất kỳ loại tối ưu hóa cuộc gọi đuôi.
Điều đó sẽ không chạy ra khỏi ngăn xếp không gian như khi gọi lại được gọi là khung ngăn xếp bên dưới nó không chứa ngăn xếp của cuộc gọi 'vô hạn' trước đó. –
@DanD. Tôi đã thử nó trong Chrome bằng cách thêm 'callback();' trong 'sendXHR', và nó báo cáo' Maximum stack stack size vượt quá' sau khoảng 9500 lần lặp. Firefox cũng nói "quá nhiều đệ quy". – Flash
Vậy thì có thể có điều gì đó thú vị trong * Gửi XMLHttpRequest tới máy chủ và gọi lại khi nhận được phản hồi * một phần. –