Как правильно воспользоваться async await?

Всем доброго вечера. Пытаюсь разобраться с async awit.
Я хочу получить массив объектов содержащий вид
[
    {
        image: 'base64...'
    },
    {
        image: 'base64...'
    }
]

и он должен формироваться по клику.
Я тут написал пример того, как это должно работать. Вот только не пойму, как сюда добавить async await
const arr = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg'];
const arrImg = [];

const getImg = url => {
    return fetch(url)
        .then(response => {
            return response.blob();
        })
        .then(blob => {
            const reader = new FileReader();
            reader.addEventListener('loadend', function() {
                arrImg.push({image: reader.reuslt});
            });
            reader.readAsDataURL(blob);
        });
};

document.querySelector('button').addEventListener('click', () => {
    arr.forEach(item => {
        getImg(`./images/${item}`);
    });
    console.log(arrImg);
});

Думаю здесь простое решение, вот только не могу додуматься какое.
  • Вопрос задан
  • 167 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const getImg = url => fetch(url)
  .then(r => r.blob())
  .then(blob => new Promise(resolve => {
    const reader = new FileReader();
    reader.addEventListener('loadend', () => resolve({ image: reader.result }));
    reader.readAsDataURL(blob);
  }));


document.querySelector('button').addEventListener('click', async () => {
  const arrImg = await Promise.all(arr.map(n => getImg(`./images/${n}`)));
  console.log(arrImg);
});
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега JavaScript
const arr = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg'];

const getImg = async (url) => {
  const response = await fetch(url); 
  const blob = await response.blob();
  const reader = new FileReader();

  return new Promise(resolve => {
    reader.addEventListener('loadend', function() {
      resolve({image: reader.result});
    });
    reader.readAsDataURL(blob);
  });
}

document.querySelector('button').addEventListener('click', async () => {
    
    const arrImg = await Promise.all(arr.map(
      url => getImg(url)
    ));

    console.log(arrImg);
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы