6

非同期の 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 エンジンがテール コールの最適化を行っているとは思いません。

4

1 に答える 1

10

sendXHR()ajax呼び出しが非同期の場合、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 に答える