假设我想向服务器发送一个异步AJAX请求,当它响应时发送另一个请求并永远重复:
function sendXHR(url, callback) {
// Send XMLHttpRequest to server and call callback when response is received
}
function infinite() {
sendXHR('url/path', infinite);
}
infinite();
我在这里假设我们会很快耗尽堆栈空间,所以我该怎么做(没有阻塞)?
传递回调而非使用return
的模式在node.js
中特别受欢迎。人们如何创造无限循环?我不相信大多数JS引擎会进行任何类型的尾调用优化。
答案 0 :(得分:9)
如果您的ajax调用是异步的,则不会耗尽堆栈空间,因为sendXHR()
会在发送ajax请求后立即返回。然后在ajax响应到来之后的某个时间调用回调。没有堆叠堆积。
如果您的ajax调用是同步的,并且您希望允许其他事件以及在javascript环境中不会发生的事情,那么您可以这样:
function sendXHR(url, callback) {
// Send XMLHttpRequest to server and call callback when response is received
}
function infinite() {
sendXHR('url/path');
setTimeout(infinite, 1);
}
infinite();