0

ajax リクエストを含む関数が必要です。1 つ目は、バッチを要求します。batchId に基づいて、累積結果を保存しながら完了を返すまでバッチを取得し続けます。done が返されると、batchRequest はすべての結果を含むコールバックを返す必要があります。

Android WebView に問題があるため、これで setTimeout を使用したくありません。前の完了後、すぐに別の getBatch チェックを行う必要があります。

var batchRequest = function(request, callback) {
$.ajax({
    //some ajax request here
    success: function(data) {
    var results = [];

    getBatch(data.batch.id, function(result) {
        results.push(results.item);

        if (result.done) {
        callback(results);
        } else {
        getBatch(result.id);
        }
    });
    }
});
};

var getBatch = function(batchId, callback) {
$.ajax({
    //get using the batchId
    success: function(data) {
    callback(data);
    }
});
};

もともと、batchRequest 関数内に getBatch 関数をネストしていましたが、それが最善の方法だとは思いません。batchRequest ループ getBatch を使用して、終了時にすべてを返すにはどうすればよいですか?

4

2 に答える 2

1

次のように短縮できるはずです(テストされていません):

var getBatch = function (request, callback) {
    var results = [],
        getBatchPart = function (batchId) {
            $.ajax({
                // ajax params
            }).done(function (data) {
                results.push(data.item);

                if (data.done) {
                    callback(results);
                } else {
                    getBatchPart(batchId);
                }
            });
        };

    $.ajax({
        // ajax params
    }).done(function (data) {
        getBatchPart(data.batch.id);
    });
});
于 2013-07-30T14:00:04.977 に答える
0

両方の機能を維持できる問題の解決策を見つけました。getBatch呼び出された別の関数で呼び出しをラップするとgetNext、結果変数にデータを追加しながら呼び出しを連鎖させます。最後に、完了したことを返すと、包括的な結果とともにコールバックに送信されます。

var batchRequest = function(request, callback) {
    $.ajax({
        //some ajax request here
        success: function(data) {
            getNext(data.batch.id);
        }
    });

    var results = [];
    function getNext(batchId) {
        getBatch(batchId, function(result) {
            results.push(result.item);
            if (result.done) {
                callback(result);
            } else {
                getNext(result.id);
            }
        });
    };
};

var getBatch = function(batchId, callback) {
    $.ajax({
        //get using the batchId
        success: function(data) {
             callback(data);
        }
    });
};
于 2013-07-30T13:52:24.533 に答える