javascript中具有异步回调模式的无限循环

时间:2012-11-17 04:39:42

标签: javascript node.js design-patterns functional-programming tail-recursion

假设我想向服务器发送一个异步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引擎会进行任何类型的尾调用优化。

1 个答案:

答案 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();