Как прервать 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;
});
}