6

假设我想向服务器发送一个异步 AJAX 请求,当它响应时发送另一个请求并永远重复:

function sendXHR(url, callback) {
    // Send XMLHttpRequest to server and call callback when response is received
}

function infinite() {
    sendXHR('url/path', infinite);
}

infinite();

我假设在这里我们会很快耗尽堆栈空间,那么我该怎么做(不阻塞)?

传递回调而不是使用的模式returnnode.js. 人们如何创建无限循环?我不相信大多数 JS 引擎会进行任何尾调用优化。

4

1 回答 1

10

如果您的 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();
于 2012-11-17T04:59:45.220 回答