Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.09.2014, 01:38
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

Задержка в задержке
Это как "нужно смотреть ещё глубже (с)"
Вообщем такая проблема - хочу сделать чтоб выполнялось что-то вроде такого:
function intv() {
    
    var i = 0;
    var j = 0;
    
    var interval_1 = setInterval(function(){
  		console.log("out = " + i);
        
        var interval_2 = setInterval(function(){
            console.log("in = " + j);
            j++;
            if (j == 2) {
                j = 0;
            	clearInterval(interval_2);
        	}
    	}, 5000);
        
        i++;
        if (i == 2) {
            clearInterval(interval_1);
        }
    }, 3000);
}

intv();

Т.е. чтоб цикл крутился с задержкой, и на каждой его итерации выполнялся внутренний цикл со своей задержкой. Но уже сколько пробую и с интервалом и с таймаутом, ну никак не могу добиться нужного результата
В идеале бы получить:
Код:
out = 0
in = 0
in = 1
out = 1
in = 0
in = 1
А на деле выходит:
Код:
out = 0
out = 1
in = 0
in = 1
in = 0
in = 1
Совсем не та очерёдность
Ответить с цитированием
  #2 (permalink)  
Старый 27.09.2014, 01:59
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

igorz, а где собственно цикл?
Ответить с цитированием
  #3 (permalink)  
Старый 27.09.2014, 02:07
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

Сообщение от Rise Посмотреть сообщение
igorz, а где собственно цикл?
А чем Вам interval_1 и interval_2 не циклы, которые выполняются пока их не остановят ? В моём случае каждый по 2 раза до clearInterval.
Ответить с цитированием
  #4 (permalink)  
Старый 27.09.2014, 02:13
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

igorz, это интервалы а не циклы.
Ответить с цитированием
  #5 (permalink)  
Старый 27.09.2014, 02:19
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

ps - Хотя, я наверное глупость написал через интервалы...
Извиняюсь за эту тему... и если можно, пусть модераторы удалят

Последний раз редактировалось igorz, 27.09.2014 в 02:23.
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2014, 02:25
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

igorz, циклы замыкания таймаут.
Ответить с цитированием
  #7 (permalink)  
Старый 27.09.2014, 02:36
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

Да почему-то я всё думал что внешний интервал будет 100% ждать завершения внутреннего, а оно же не так...
Ответить с цитированием
  #8 (permalink)  
Старый 27.09.2014, 11:19
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Будет ждать если внутренний отключит внешний. Вы мыслите геометрически, а тут надо мыслить хронометрически.
Ответить с цитированием
  #9 (permalink)  
Старый 27.09.2014, 11:23
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от igorz
Т.е. чтоб цикл крутился с задержкой
Так добавьте эту задержку. Дубовый способ в функции интервала проверять тики:

Цитата:
if(ticks++ < 100)
return;
ticks=0;
// тут что-то полезное делается
Или проверять время:

var start = new Date;

// в функции интервала

var now=new Date;
if(now-start<100)
 return;

Последний раз редактировалось kostyanet, 27.09.2014 в 11:27.
Ответить с цитированием
  #10 (permalink)  
Старый 27.09.2014, 13:28
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

Всё равно не пойму до конца.
var abc_counter = 0;

function abc() {
    var abc_Timeout = setTimeout(function() {        
        console.log("setTimeout 1000");
        abc_counter++;
        if (abc_counter < 5) {
            abc(); 
        } else {
            clearTimeout(abc_Timeout); 
        }
    },1000);
}
abc();

Всё классно - пробегает 5 раз по 1 секунде. А как правильно внутрь каждого выполнения всунуть ещё одну функцию с задержкой, но так, чтоб пока она не выполнится то следующий виток внешней не начнётся ?
Вроде бы, логически переделываю в такое, но выходит что неправильно.(и да, с тиками не понял честно говоря как именно их использовать)

var abc_counter = 0;
var inner_abc_counter = 0;

function abc() {
    var abc_Timeout = setTimeout(function() {        
        console.log("setTimeout 1000");
        
        inner_abc();
        function inner_abc() {
            var inner_Timeout = setTimeout(function() {
            	console.log("setTimeout 500");
            	inner_abc_counter++;
            	if (inner_abc_counter < 3) {
            		inner_abc(); 
        		} else {
            		clearTimeout(inner_Timeout); 
        		}
            },500);
        }
        inner_abc_counter = 0;
        
        abc_counter++;
        if (abc_counter < 5) {
            abc(); 
        } else {
            clearTimeout(abc_Timeout); 
        }
    },1000);
}
abc();

Последний раз редактировалось igorz, 27.09.2014 в 15:35.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задержка перед появлением второго уровня меню esergion jQuery 4 01.07.2016 19:48
Задержка ответа return bartle96 AJAX и COMET 3 24.04.2013 09:20
задержка на реакцию .mouseenter dimon76 jQuery 14 25.11.2011 19:02
Задержка перед повтором проигрывания audio Андрей Параничев Firefox/Mozilla 1 20.10.2011 02:51
Задержка перед показом анимации Gorini4 Элементы интерфейса 3 05.09.2011 02:37