4

それが最新の場合、コールスタックオーバーフローの問題が発生しますか?

自己を再帰的に呼び出すからです

そのような問題が発生する場合、より良い実装はありますか?

function waitForMsg(){
    $.ajax({
        type: "GET",
        url: "xxx.php",
        async: true,
        cache: false,
        timeout: 600000,
        success: function(data){
            handleFunction(data);
            waitForMsg();
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            XMLHttpRequest.abort();
            waitForMsg();
        }
    });
}
4

1 に答える 1

1

これは一種の再帰だと思いますが、現在のコンテキストに関して厳密にはそうではありません。なぜなら、ajax 関数に渡されたオブジェクトに匿名関数を追加していて、ajax 呼び出しがすぐに返されるためです (評価するために何もしません)。関数)。最終的に ajax が成功または失敗すると、呼び出される必要がある関数は、スタック値とスタックの場所が異なる完全に新しいコンテキストになります。

ところで、XMLHttpRequest.abort();呼び出しを理解しているかどうかはわかりません。その時までに XMLHttpRequest はすでに失敗しているので、abort は必要ないはずです (私はそう思います!)。

于 2012-04-12T20:41:16.947 に答える