Проверка корректности ссылок для img

Не удается проверить массив ссылок на изображения из интернета

function checkImageLink(arURLS) {
    return new Promise((resolve, reject) => {
        let res = [];
        for (let index = 0; index < arURLS.length; index++) {
            let img = new Image();
            img.src = arURLS[index];
            img.onload = () => {
                res.push(arURLS[index]);
            };
        }
        resolve(res);
    });
}

После выполнения, данная функция возвращает пустой массив. Подскажите пожалуйста почему так.


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

Автор решения: ksa

После выполнения, данная функция возвращает пустой массив. Подскажите пожалуйста почему так.

Мало "обещаний"... Если сделать саму загрузку картинки промисом - их можно объединить в "единый" промис. Например вот так.

const a = [
  'https://s1.1zoom.ru/big3/399/339975-svetik.jpg',
  'https://wallpaper.forfun.com/fetch/a6/a609f352bbc5264204247b1125224c47.jpeg',
  'https://www.fonstola.ru/pic/202002/1920x1080/fonstola.ru_371534.jpg',
  'https://error.jpg',
]
checkImageLink(a)
  .then(a => console.log('Ответ', a))
  .catch(console.log)
//
function checkImageLink(arURLS) {
  return new Promise((resolve, reject) => {
    const p = [];
    for (let index = 0; index < arURLS.length; index++) {
        p.push(loadImage(arURLS[index]));
    }
    Promise.allSettled(p)
      .then(resolve)
      .catch(reject)
  });
}
//
function loadImage(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.src = url;
    img.onload = _ => resolve(url)
    img.onerror = _ => reject()
  });
}

→ Ссылка