| 
	| 
	
	| 
		
	| 
			
			 
			
				09.11.2015, 22:54
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 31.10.2015 
						Сообщений: 29
					 
		
 |  |  
	| 
	
 
	| Сообщение от pnpquest   |  
	| Да |  
	
 Спасибо, понятно. Я просто думал до этого, что задание отправляется на выполнение сразу же, а вывод результата в зависимости от времени исполнения. Ошибался значит, сам пару недель назад начал знакомиться.
 
	
 
	| Сообщение от pnpquest   |  
	| Да Что значит как надо? Он также отработает.
 |  
	
 Значит это, что его колбэк может вывести изменённое значение переменной "а", хотя и не так, как хочет того топикстартер.
 
Но про то, что Вы имели ввиду, тоже ясно, мой пример Выше это наглядно показывает. |  |  
	| 
		
	| 
			
			 
			
				09.11.2015, 23:14
			
			
			
		 |  
	| 
		
			
			| Аспирант     |  | 
					Регистрация: 09.11.2015 
						Сообщений: 94
					 
		
 |  |  
	| 
	
 
	| Сообщение от nick1m |  
	| что задание отправляется на выполнение сразу же, а вывод результата в зависимости от времени исполнения |  
	
 Да так оно и есть. 
Точней, коллбек сеттится на событие таймера.. Когда событие таймера срабатывает, этот коллбек начинает исполняться. Таймер сам его запускает, но только в том случае, если поток не занят. В противном случае, он кидается в очередь на исполнение. Во время своего исполнения, он также как и любой код блокирует единственный поток.
 
А возвращаясь к тому вопросу, если будет долгий цикл, он просто не даст начать исполняться коллбеку, который назначен на время задержки. Коллбек будет вынужден "ждать", пока цикл отработает.			 Последний раз редактировалось pnpquest, 09.11.2015 в 23:37.
 |  |  
	| 
		
	| 
			
			 
			
				09.11.2015, 23:47
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 31.10.2015 
						Сообщений: 29
					 
		
 |  |  
	| 
	
 
	| Сообщение от pnpquest   |  
	| А возвращаясь к тому вопросу, если будет долгий цикл, он просто не даст начать исполняться коллбеку, который назначен на время задержки. Коллбек будет вынужден "ждать", пока цикл отработает. |  
	
 Спасибо за развёрнутый ответ!
 
А колбэки, получается друг друга не блокируют? Т.к. вывод колбэка одной и той же функции осуществляется вовсе не в порядке поступления запроса. Так?
 
PS: Может я наивные вопросы задаю, но у меня пока трудно всё это в голове укладывается. Интуитивно понимаю, даже уже кое-чего написал, работает, для линейности стадий обработки использовал оборачивание в промисы. Но полной ясности представления ещё нет.   |  |  
	| 
		
	| 
			
			 
			
				09.11.2015, 23:53
			
			
			
		 |  
	| 
		
			
			| Аспирант     |  | 
					Регистрация: 09.11.2015 
						Сообщений: 94
					 
		
 |  |  
	| 
	
 
	| Сообщение от nick1m |  
	| А колбэки, получается друг друга не блокируют? |  
	
 Блокируют. В единственном потоке может исполняться только один коллбек. Они исполняются в порядке очереди, если поток занят. |  |  
	| 
		
	| 
			
			 
			
				10.11.2015, 00:01
			
			
			
		 |  
	| 
		
			
			| Аспирант     |  | 
					Регистрация: 09.11.2015 
						Сообщений: 94
					 
		
 |  |  
	| 
	
 
	| Сообщение от nick1m |  
	| вывод колбэка одной и той же функции осуществляется вовсе не в порядке поступления запроса |  
	
 не в порядке, но это звисит от внешних условий, а не от самого движка. Например от сети, от порядка обработки сервером. Например, экземпляр XMLHttpRequest, асинхронно отсылает запрос, а при получении ответа он запускает коллбек. Если одна функция посылает 2 запроса,, она, как правило создает 2 экземпляра XMLHttpRequest, и каждый экземпляр дожидается своего ответа. Не факт, что 1 ответ придет раньше второго |  |  
	| 
		
	| 
			
			 
			
				10.11.2015, 00:21
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 31.10.2015 
						Сообщений: 29
					 
		
 |  |  
	| 
	
 
	| Сообщение от pnpquest   |  
	| не в порядке.. |  
	
 Понял, спасибо, именно это я и имел ввиду. |  |  
	| 
		
	| 
			
			 
			
				20.11.2015, 02:33
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 12.04.2010 
						Сообщений: 557
					 
		
 |  |  
	| 
	
 
	| Сообщение от freeneutron   |  
	| Помогите решить такую задачу. Надо вместо точек вставить некоторый код, не обращающийся к переменной a и такой, что бы console.log выводил: 1, 
 
a= 0;
setTimeout(function(){a= 1},1000)
. . .
console.log(a)
 |  
	
 
a= 0;
setTimeout(function(){a= 1},1000)
setTimeout(function(){cb();},1000); var cb = () => 
console.log(a)
работает везде, где имеют место "стрелочные функции" из нового стандарта.
 
---- 
Но, возможно, задача была не в этом? здесь по сути мы запустили console.log в другом "тике". Может, надо это сделать в том же "тике", в котором отработали строки 1 и 2? Тогда на 3 строку надо вставить код, который будет не менее секунды прокручивать "цикл очереди сообщений" ноды (подобно тому как модальные окна в винде крутят очередь потока, блокируя вызывающую функцию, но не UI в целом). Можно ли так сделать, судить не берусь. |  |  
	| 
		
	| 
			
			 
			
				20.11.2015, 10:17
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 31.10.2015 
						Сообщений: 29
					 
		
 |  |  
	| 
	
 
	| Сообщение от Яростный Меч   |  
	| 
a= 0;
setTimeout(function(){a= 1},1000)
setTimeout(function(){cb();},1000); var cb =  () => 
console.log(a)
 |  
	
 Прикольное решение!!!    
"Ловкость рук и никакого мошенничества" (с)    
На сколько я понимаю, данная запись равносильна:
 
a= 0;
setTimeout(function(){a= 1},1000)
setTimeout(function(){cb();},1000); var cb =  function() { 
  console.log(a)
}
Но, тем не менее, решает условие задачи в том виде, как оно представлено. |  |  
	| 
		
	| 
			
			 
			
				23.11.2015, 02:47
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 07.03.2011 
						Сообщений: 1,141
					 
		
 |  |  
	| 
	
 
	| Сообщение от freeneutron |  
	| Помогите решить такую задачу. Надо вместо точек вставить некоторый код, не обращающийся к переменной a и такой, что бы console.log выводил: 1, a= 0;
 setTimeout(function(){a= 1},1000)
 . . .
 console.log(a)
 |  
	
 Так очевидно же переопределить функцию и пусть она выводит что душе угодно 
 
a= 0;
setTimeout(function(){a= 1},1000)
c=console;console={"log":function(){c.log(5);console=c}};
console.log(a)
			 Последний раз редактировалось MallSerg, 23.11.2015 в 03:34.
 |  |  
	| 
		
	| 
			
			 
			
				23.11.2015, 03:38
			
			
			
		 |  
	| 
		
			
			| Аспирант     |  | 
					Регистрация: 09.11.2015 
						Сообщений: 94
					 
		
 |  |  
	| Яростный Меч, 
 Твой код эквивалентен
 
a= 0;
setTimeout(function(){a= 1},1000)
setTimeout(function(){console.log(a)},1000)
Только написан через жопу. 
Про какие стрелочные функции и новые тики ты говоришь, хз. |  |  |  |