Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.06.2018, 11:08
Аспирант
Отправить личное сообщение для Evgeny_Dedov Посмотреть профиль Найти все сообщения от Evgeny_Dedov
 
Регистрация: 14.07.2013
Сообщений: 32

Несколько запросов - один callback
Здравствуйте.
Скажите почему не отрабатывает callback когда все запросы успешны.
У меня что крыша поехала, на ровном месте тупняк!
incJS : function(path, clb){
		var length = path.length, deferreds = [], idx = 0. isJS = [];

		for( ; idx < length; idx++ ){
			if( ! isJS[path[idx]]){
				isJS[path[idx]] = true;				
				deferreds.push($.ajax({url:path[idx], dataType:'script', cache:false}));
			}
		}

		$.when.apply(undefined, deferreds).then(function(){
			if(clb && $.isFunction(clb)) clb();
		});
		
	}

       incJS(['1.js','2.js','3.js'], function(){
              console.log('Все запросы выполнены успешно.');
       })
Ответить с цитированием
  #2 (permalink)  
Старый 09.06.2018, 11:15
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

вторая строка, точка после нуля?
Ответить с цитированием
  #3 (permalink)  
Старый 09.06.2018, 11:20
Аспирант
Отправить личное сообщение для Evgeny_Dedov Посмотреть профиль Найти все сообщения от Evgeny_Dedov
 
Регистрация: 14.07.2013
Сообщений: 32

Нет это я сейчас опечатался, у меня там зпт
Ответить с цитированием
  #4 (permalink)  
Старый 09.06.2018, 11:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Evgeny_Dedov,
данный скрипт и загружаемые лежат в одной папке?
не критично, но лучше isJS = {}, а не [];
Ответить с цитированием
  #5 (permalink)  
Старый 09.06.2018, 11:40
Аспирант
Отправить личное сообщение для Evgeny_Dedov Посмотреть профиль Найти все сообщения от Evgeny_Dedov
 
Регистрация: 14.07.2013
Сообщений: 32

Нет, но в консоле все запросы указывают на правильные пути, все запросы
успешны 200, в ответе прилетают все скрипты..
Ответить с цитированием
  #6 (permalink)  
Старый 09.06.2018, 11:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Evgeny_Dedov,
версия jQuery?
Ответить с цитированием
  #7 (permalink)  
Старый 09.06.2018, 11:44
Аспирант
Отправить личное сообщение для Evgeny_Dedov Посмотреть профиль Найти все сообщения от Evgeny_Dedov
 
Регистрация: 14.07.2013
Сообщений: 32

jquery_v1.10.1
Ответить с цитированием
  #8 (permalink)  
Старый 09.06.2018, 11:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Evgeny_Dedov,
замените на 1.12.4 или выше
Ответить с цитированием
  #9 (permalink)  
Старый 09.06.2018, 11:59
Аспирант
Отправить личное сообщение для Evgeny_Dedov Посмотреть профиль Найти все сообщения от Evgeny_Dedov
 
Регистрация: 14.07.2013
Сообщений: 32

Нет к сожалению не помогло..
Отрабатывает с точностью наоборот, первый вызов - тишина, все последующие - callback...
Ответить с цитированием
  #10 (permalink)  
Старый 09.06.2018, 12:05
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

А так работает?
/**
 * @author  Mikhailov «Nexus» Artem
 * @site    [url]https://vk.com/nexus94[/url]
 */

var require,requirePathPrefix='';
(function(){
	let __loaded_libraries={};
	const getArguments=function(args){
		return (args[0] instanceof Array)?args[0]:[].slice.call(args);
	};
	const get=function(type,args){
		if(!args.length)
			return Promise.resolve();

		return require(
			getArguments(args).map(function(path){
				return {
					type:type,
					src:path
				};
			})
		);
	};
	const Interface={
		js:function(url){
			return get('js',arguments);
		},
		css:function(url){
			return get('css',arguments);
		}
	};

	require=function(){
		if(!arguments.length)
			return Interface;

		const prom=Promise.all(getArguments(arguments).filter(function(path){
			path=(!!path.src&&!!path.type)?path:path.split('#').shift().split('?').shift();//remove hash and get-params

			return (!__loaded_libraries[path] || !!path.src) && ['css','js'].indexOf(
				!!path.type?
					path.type:
					path.split('.').pop().toLowerCase()
			)>-1;
		}).map(function(path){
			return new Promise(function(resolve,reject){
				__loaded_libraries[!!path.src?path.src:path]=true;

				let is_js=(!!path.type?
						path.type:
						path.split('#').shift().split('?').shift().split('.').pop().toLowerCase()
					)==='js',
					file_path=(!!path.src?path.src:path),
					src=((file_path.substr(0,2)==='//' || file_path.indexOf('http')===0)?'':requirePathPrefix)+
						file_path.replace('nocache','nocache='+Math.random()),
					node=document.createElement(is_js?'script':'link'),
					attrs=is_js?{
						type:'text/javascript',
						src:src
					}:{
						type:'text/css',
						href:src,
						rel:'stylesheet'
					};

				for(let i in attrs){
					if(attrs.hasOwnProperty(i))
						node.setAttribute(i,attrs[i]);
				};

				node.onload=resolve;
				node.onerror=reject;
				document.head.appendChild(node);
			});
		}));
		prom.catch(function(){
			alert('Не удалось загрузить файл. Обновите, пожалуйста, страницу.');
		});

		
		return prom;
	}
})();

require(['1.js','2.js','3.js']).then(function(){
	console.log('Все запросы выполнены успешно.');
});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли так использовать callback функции? Denwf Node.JS 2 14.03.2017 10:20
ng-template - Как добавить несколько шаблонов в один тег посредство ng-click A1x1On2015 Angular.js 0 02.02.2016 18:13
Автоматическое открытие модального окна через несколько секунд Galyanov Элементы интерфейса 2 04.07.2015 14:26
Несколько аякс запросов. Склеить данные. ANAGAMA AJAX и COMET 2 04.03.2015 18:01
hover - несколько элементов как один megapup Events/DOM/Window 3 28.10.2010 20:06