1

1 つの同期 Web サービス呼び出しに続いて複数の並列呼び出しを実行し、並列タスクが完了したときに最後の同期呼び出しを完了したいと考えています。私は $.Deferred を研究しており、概念的に理解していますが、これを行うための正しい構文を見つけることができません。3 つの連続した呼び出しを行おうとするこのコードには、多くのエラーがあることはわかっています。checkProgress コードが呼び出されることはありません。

function doSequential(a, b, c) {
    report("Starting Sequential Test");
    process("A", urlDo, a, '#spnA');
    process("B", urlDo, b, '#spnB');
    process("C", urlDo, c, '#spnC');
}

function process(id, url, size, selector) {
    var data = JSON.stringify({ id: id, size: size });
    var deferred = $.Deferred();
        deferred.promise = $.ajax({
            url: urlDo,
            data: data,
            type: "Post",
            contentType: 'application/json; charset=utf-8',
            dataType: "json"
        });
    deferred.then(
        function (response) {
            // Done
            $("#spn" + id).append("Done");
            report(id + " done");
            return
        },
        function (error) {
            // Fail
            $("#spn" + id).append("Error: " + error);
            report(id + " error: " + error);
            return;
        },
        function (data) {
            // Notify progress
            var check = setInterval(function () {
                var done = checkProgress(id);
                if (done) {
                    clearInterval(check);
                    return;
                }
            }, 1000);
            return;
        });
}

function checkProgress(id) {
    var data = JSON.stringify({ id: id });
    var status = ajaxCall(urlCheck, data);
    if (status) {
        $("#status" + id).text(status.count + " of " + status.size);
        report(status.message);
        return status.done;
    }
    report("checkProgress failed");
    return true;
}
4

1 に答える 1