Найти все blob по url blob и занести их в массив используя xhr

Используя данный код я могу получить из урла blob (http://localhost:3000/39727d65-c7a2-451d-8bdd-f6d0353f35c2) лишь одно значение в массиве blobArray.

const lengthFiles = Object.keys(data[path]["media"]).length; //получаю количество url Blob
const blobArray = [];
let xhr = new XMLHttpRequest()
xhr.responseType = "blob"
//перебираю все url по порядку
for (let i = 0; i < lengthFiles; i++) {
  const blobURL = data[path]["media"][i]["preview"];
  xhr.open("GET", blobURL);
  xhr.send();
};
//выгружаю из буфера необходимый blob и заношу в массив blobArray
xhr.onload = function() {;
  const recoveredBlob = xhr.response;
  const reader = new FileReader();
  reader.onload = function() {;
    const blobAsDataUrl = reader.result;
    blobArray.push(blobAsDataUrl);
  };
  reader.readAsDataURL(recoveredBlob);
};
console.log(blobArray) // получаю только лишь один blob, вместо нескольких
Как можно записать в массив все необходимые blob-файлы?


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

Автор решения: Nickolai Bondarenko

Решил проблему занесением всего xhr компонента в цикл, тем самым получив полный массив данных

for (let i = 0; i < lengthFiles; i++) {
  const xhr = new XMLHttpRequest()
  xhr.responseType = "blob"
  const blobURL = data[path]["media"][i]["preview"];
  xhr.open("GET", blobURL);
  xhr.send();
  xhr.onload = function() {;
    const recoveredBlob = xhr.response;
    const reader = new FileReader();
    reader.onload = function() {;
      const blobAsDataUrl = reader.result;
      blobArray.push(blobAsDataUrl);
    };
    reader.readAsDataURL(recoveredBlob);
  };
};
console.log(blobArray)

→ Ссылка