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

Fla*_*ash 6 javascript design-patterns functional-programming tail-recursion node.js

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

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

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

infinite();
Run Code Online (Sandbox Code Playgroud)

我在这里假设我们很快就会耗尽堆栈空间,所以我怎么能这样做(没有阻塞)?

传递回调而不是使用回调的模式return特别受欢迎node.js.人们如何创造无限循环?我不相信大多数JS引擎会进行任何类型的尾调用优化.

jfr*_*d00 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();
Run Code Online (Sandbox Code Playgroud)