Задержка в задержке
Это как "нужно смотреть ещё глубже (с)" :haha:
Вообщем такая проблема - хочу сделать чтоб выполнялось что-то вроде такого: 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 Код:
out = 0 |
Цитата:
|
ps - Хотя, я наверное глупость написал через интервалы...
Извиняюсь за эту тему... и если можно, пусть модераторы удалят :) |
Да почему-то я всё думал что внешний интервал будет 100% ждать завершения внутреннего, а оно же не так...
|
Будет ждать если внутренний отключит внешний. Вы мыслите геометрически, а тут надо мыслить хронометрически.
|
Цитата:
Цитата:
var start = new Date; // в функции интервала var now=new Date; if(now-start<100) return; |
Всё равно не пойму до конца.
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(); |
Часовой пояс GMT +3, время: 00:08. |