@vGrabko99
html, css, js, php, golang, mysql

Почему ошибки в терминале?

Мой код работает корректно. (alert("test"); срабатывает)
Но в терминале говорит о ошибке
7bc65f3baa9a46898d3acedb6ef6fc45.png
//создаём регистр в который будем заносить все скрипты которые импортировали
var registrImport = {};


//пишем текущий скрипт в регистр
registrImportUpdate("/js/kernel/importer/importer.js");

//в этом блоке будем грузить все системные пакеты. НА данный момент только package
registrImportUpdate("/js/kernel/package/package.js");

var s = loadJs("/js/kernel/package/package.js");
s.onerror = function() { 
      alert("Ошибка при загрузке системного пакета package.js");
};


//функция для запуска скриптов и отработки кода. 
//пример использования
/*
imports([
      "/js/src/supports/supports_html5.js",
      "/js/src/lib/jquery.js"      
  ], 
  function (){
    alert('test');
  }, 
  function (err){
    alert(err);
  });

где 

[
      "/js/src/supports/supports_html5.js",
      "/js/src/lib/jquery.js"      
]
скрипты которые необходимо загрузить.

function (){
    alert('test');
  }
функция которая будет выполнена если всё загрузим


function (err){
    alert(err);
}
функция которая будет вызвана в случае ошибки
*/
function imports(arr, onSuccess, onError){
	//количество скриптов для загрузки
  var count = arrCount(arr);
  //сколько скриптов передано на загрузку
  var coutLoad = 0;
  //скрипты перебираем в цикле
  arr.forEach(function(item) {
    //добавляем 1 загрузку в щётчик
    coutLoad++;
    //если пакет до этого не импортирован то вернёт undefined
	    if (registrImport[item] == undefined){
         //пакета в регистре ещё нет. Добавим его туда
         registrImportUpdate(item);
         //загрузим скрипт
         var script = loadJs(item);
         //выполним одну из функций 
         // onError если ошибка
         // onSuccess если загружено
         loadFunc(script,item, onError, onSuccess, count, coutLoad);     
      } else {
      	 console.info(item + "	загружен ранее.");
      }
  });
}

//считаем количество скриптов в масиве
function arrCount(arr){
  var count = 0;
  arr.forEach(function(){
    count++;
  });
  return count;
}

//грузит скрипт по url
function loadJs(url){
  var script = document.createElement('script');
  script.src = url;
  script.async = false;
  script.defer = true;
  document.head.appendChild(script); 
  return script;
}


function loadFunc(script,url, onError, onSuccess, count, coutLoad){
  //если ошибка
  script.onerror = function() { 
    onError(url);
  };

  //если всё 
  script.onload = function() { 
  //Что бы срабатывало только когда загружен последний елемент масива
    if(count == coutLoad){
        onSuccess(); 
    }
  };
}

//добавляет запись в регистр
function registrImportUpdate(url){
  registrImport[url] = 0;
}


Вызываю так
imports([
			"/js/src/supports/supports_html5.js"			
	], 
	function (){
		alert('test');
	}, 
	function (err){
		alert(err);
	});
  • Вопрос задан
  • 181 просмотр
Решения вопроса 3
@IceJOKER
Web/Android developer
потому что у вас нет функции onSuccess();
там же ярко-красным на светло-красном написано! :D
Ответ написан
Maxsior
@Maxsior
loading...
Разобраться действительно трудно, видимо Вы пришли из процедурного программирования в JS, а для реализации подобных систем обычно используют объекты, потому что они работают быстрее, чем отдельные функции, не надо тащить кучу аргументов из функции в функцию, и ещё много плюсов у этого подхода:
function Loader(){
  // Описываем все нужные методы и свойства
  this.queue=[]
  this.clearqueue=function()[this.queue=[]}
  this.loadScripts=function(array_of_scripts){ /* ... */ }
 // и т.д.
}
//Создаём объект
var l=new Loader()
l.loadScripts(["/script_1.js","/script_2.js"])

Так же ознакомьтесь с шаблоном "Очередь" Queue
Ответ написан
@vGrabko99 Автор вопроса
html, css, js, php, golang, mysql
я в одном скрипте забыл обновить вызов. Твою жеш "№;"!№
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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