@1ax3l
Web Developer

Как работают переменные в Javascript?

Хочу сделать некую проверку по изображению:

var proxy = false;

var img = new Image();

img.onload = function () {
    proxy = false;
}

img.onerror = function () {
    proxy = true;
}

img.src = '...';

console.log('Proxy:', proxy);

Такое ощущение что консоль выдает значение до использования onload/onerror
Как можно синхронизировать функцию?
  • Вопрос задан
  • 326 просмотров
Решения вопроса 1
@ISE73
Код выполняеся последовательно. И конечно он не ждет когда там загрузится картинка.
Поправить так:
1) Современный способ: asyc/await
2) Дедовский способ: SetInterval - в функции проверяем proxy, если true - сбрасываем SetInteval и делаем что там хотелось сделать с картинкой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
конечно выдает до onload, ведь onload это callback, он произойдет после загрузки изображения. У вас код тупо идет дальше.
Ответ написан
@GreatRash
function loadImages(imagesArray, callback) {
  var imagesStates = {};
  var imagesChecked = 0;
  var totalImages = imagesArray.length;

  for (var i = 0; i < totalImages; i++) {
    var src = imagesArray[i];
    imagesStates[src] = {"loaded": false};
    
    var img = new Image();

    img.onload = function() {
      if (this.complete || this.naturalWidth > 0) {
        imagesStates[src].loaded = true;
      }
      
      imagesChecked++;
      
      if (imagesChecked >= totalImages) {
        callback(imagesArray, imagesStates);
      }
    };

    img.onerror = function() {
      imagesChecked++;
      
      if (imagesChecked >= totalImages) {
        callback(imagesArray, imagesStates);
      }
    };
    
    img.src = src;
  }
}

// ===============================

loadImages(
  ["src_1.png", "src_2.png", "src_3.png"],

  function(imagesArray, imagesStates) {
    console.log(imagesStates);
  }
);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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