2

各リクエストから返される成功応答ごとにajaxリクエストを再帰的に作成しようとしています。スタックオーバーフローが発生しやすいでしょうか。もしそうなら、これを行うためのより良い方法はありますか?私の要件は、最初にajaxリクエストを実行することです。返されたjsonが実行されない場合は、doneフラグを取得するまで、同じパラメーターを使用して別のajaxリクエストを実行します。

go: function (r) {
    Ext.Ajax.request({
        url: 'bleh',
        success: function (response) {
            var data = Ext.decode(response.responseText); // decode json into object
            r.update();
            if (!data.isDone) go(r);
        }
    });
}
4

1 に答える 1

5

これは実際には再帰ではないため、スタックオーバーフローの危険はありません。再帰のように見えるかもしれませんが、ajax呼び出しは非同期であるため、go()関数はajax呼び出しを開始するだけで、go()ajax呼び出しの進行中に関数はすぐに終了します。したがって、成功ハンドラーは、go()関数が既に終了したずっと後に呼び出されます。したがって、実際には再帰ではなく、スタックの蓄積もありません。

コードの視覚効果からは再帰のように見えるかもしれませんが、ajax呼び出しは非同期であり、go()関数が戻ってからずっと後に成功ハンドラーが呼び出されるため、スタックの蓄積はありません。

于 2012-04-04T21:11:59.553 に答える