setTimeout()
просто планирует что-то запустить в будущем, а остальная часть вашего Javascript продолжает работать. Он не блокирует дальнейшее выполнение Javascript. Это часто называют «асинхронной» операцией. Он работает в фоновом режиме и вызовет обратный вызов когда-нибудь в будущем, когда он завершит свою работу. Он также называется «неблокирующим», поскольку он не блокирует остальную часть вашего выполнения Javascript.
Все, что вы хотите, чтобы не запускать до setTimeout()
пожара, необходимо поместить в обратный вызов setTimeout()
или позвонить оттуда.
// define function
function timer(){
myVar = setTimeout(function() {
console.log("SLOW");
}, 10000);
}
// schedule first timer
setTimeout(function() {
$("#nytLevel").hide();
// now start second timer
timer();
}, 3000);
Стоит отметить, что JQuery имеет метод .delay()
, который работает с анимацией и другими функциями, поставленных в очереди и иногда это может оптимизировать код. В приведенном выше случае, вы можете сделать это:
$("#nytLevel").delay(3000).hide().delay(10000).queue(function(next) {
console.log("SLOW");
next(); // keep the queue moving in case there's something else in the queue
});
Пожалуйста, обратите внимание, что .delay(xxx)
работает только с методами Jquery, которые сами используют очереди (например, анимацию), или с помощью методов, вы кладете в очереди самостоятельно, используя .queue()
(как я как показано выше).
Как вы выполняете свой код? Какой порядок? Предоставленный код вообще не объясняет это .... – Rayon
Это очень похоже на [проблема XY] (http://xyproblem.info). Почему вы не можете поместить вызов 'timer()' в первый тайм-аут? – JJJ
@pushalu setTimeout - это асинхронная функция –