Прервать множество xhr-запросов на сервер

Суть такова, для отправки больших объёмов информации, я делю файл на части и отправляю на сервер, соответственно, каждым запросом - одну часть, таким образом минуя ограничение сервера на размер передаваемых файлов. Вопрос, как можно прервать все эти запросы, если пользователь решил отменить загрузку?

const request = new XMLHttpRequest();
const url = "https://example.com/postDataToDB.php";

function request(chunk) {
  const formData = new FormData();
  formData.append("newFile", chunk);
  request.open("POST", url, true); //работает в асинхроне
  request.send(formData);
}

function cancel() { //отмена
  request.abort(); //не работает, т.к. судя по всему, прерывает только один запрос.
}

function createForm(files) { //деление файлов на части
  const BYTES_PER_CHUNK = 1024 * 1024 * 30;
  const lengthFiles = Object.keys(files).length; //колво файлов

  for (let i = 0; i < lengthFiles; i++) {
    const SIZE = files[i].size;
    let start = 0;
    let end = BYTES_PER_CHUNK;

    while (start < SIZE) {
      let chunk = files[i].slice(start, end);
      start = end;
      end = start + BYTES_PER_CHUNK;
      request(chunk);
    }
  }
}
<div class='button' onClick='cancel()'>Отмена</div>

Читал в гугле, что при отправке запросов можно их заносить в массив, и потом при отмене запроса для каждого запроса вызывать abort, но данный пример не работает.

const request = new XMLHttpRequest();
const url = "https://example.com/postDataToDB.php";
const xhrPool = []

function request(chunk) {
  const formData = new FormData();
  formData.append("newFile", chunk);
  request.open("POST", url, true); //работает в асинхроне
  request.send(formData);

  xhrPool.push(request);
}

function cancel() { //отмена
  xhrPool.forEach(function(request) {
    request.abort();
  })
}

Посоветуйте, может какую статейку почитать?


Ответы (0 шт):