Как прервать AJAX с обещанием

Я использую что-то вроде функции ниже, чтобы отправить несколько запросов AJAX, чтобы остановить длительный процесс. Я хочу добавить кнопку отмены, чтобы прервать все Ajax. Я попытался объединить все запросы в массив, как это, а затем перебрать и прервать их...

Я пробовал много вариантов этого, чтобы прервать все запросы AJAX.

$.xhrPool = [];

$.xhrPool.abortAll = function() {
    $.each(this, function(jqXHR) { 
        jqXHR.abort(); 
    });
};

$.ajaxSetup({
    beforeSend: function(jqXHR) {
        $.xhrPool.push(jqXHR);
    },
    complete: function(jqXHR) {
        var index = $.xhrPool.indexOf(jqXHR);
        if (index > -1) {
            $.xhrPool.splice(index, 1);
        }
    }
});

//gives me... Uncaught TypeError: $.xhrPool.abortAll is not a function

Но это не работает. Есть ли решение для этого?

Это похоже на цепочку запросов AJAX с обещаниями.

function processBigArray(bigArray, chunkSize) {
    // pre-split array into chunks
    var chunkArray = [];
    for (var i = 0; i < bigArray.length; i += chunkSize) {
        chunkArray.push(bigArray.slice(bigArray, i, chunkSize));
    }

    var results = [];

    // use .reduce() design pattern for chaining and serializing
    // a sequence of async operations
    return chunkArray.reduce(function (p, chunk) {
        return p.then(function () {
            return $.ajax({
                type: 'POST',
                url: ajax.ajax_url,
                data: {
                    'action': 'process_big_array',
                    'array_to_process': chunk
                },
                beforeSend: function () {
                    xxx
                },
                dataType: 'json',
            }).then(function (data) {
                results.push(data);
            });
        });
    }, Promise.resolve()).then(function () {
        // depending upon what your ajax returns, results might be an array of arrays
        // that you would want to flatten
        console.log(results);
        return results;
    });
}

0 ответов

Другие вопросы по тегам