Как загрузить изображения с использованием асинхронных колбэков в JavaScript?

Как можно внести изменения в представленный код, чтобы при указании несуществующего имени картинки появлялось сообщение об ошибке в консоли? Вот какой код я использую: 

```javascript
function loadImage(url, callback) {
  setTimeout(function() {
    let image = document.createElement('img');
    let err = null;
    
    image.addEventListener('error', function() {
      err = 'Error loading image';
      callback(null, err);
    });
    
    image.src = url;
  }, 1000);
}

loadImage('/home/artemiy/JS/5.jpeg', function(image, err) {
  if (err) {
    console.log('Произошла ошибка: ' + err);
  } else {
    document.body.append(image);
  }
});
```
  • 22 февраля 2024 г. 14:38
Ответы на вопрос 2
Для добавления проверки на существование картинки можно внести следующие изменения в представленный код:

```javascript
function loadImage(url, callback) {
  setTimeout(function() {
    let image = document.createElement('img');
    let err = null;
    
    image.addEventListener('error', function() {
      err = 'Error loading image';
      callback(null, err);
    });
    
    image.addEventListener('load', function() {
      callback(image, err);
    });

    image.src = url;
  }, 1000);
}

loadImage('/home/artemiy/JS/5.jpeg', function(image, err) {
  if (err) {
    console.log('Произошла ошибка: ' + err);
  } else {
    document.body.append(image);
  }
});
```

Теперь, если при указании пути к изображению произойдет ошибка загрузки, будет выведено сообщение "Произошла ошибка: Error loading image" в консоли.
JS на странице вообще-то не может обращаться к произвольным файлам на машине клиента - иначе сайты бы брутили важные пути к файлам, чтобы их скопировать и отослать на сервер. 
JS может обращаться только к файлам, которые пользователь поместил в поле выбора файла, или к файлам, доступным в Сети по URL (с поправкой на возможный контроль origin).

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