Технически, функция setTimeout()
не выполняется в потоке. Он прерывает синхронную последовательность. Это не означает, что он асинхронен и работает в отдельном потоке. Он просто выполняет его за пределами последовательного порядка. Таким образом, функция hide()
выполняется до того, как задача фактически завершена, и мы не видим загрузчика.
Он асинхронный (частично), но определенно не работает на параллельном потоке.
Так, что-то вроде этого кода обыкновению на самом деле работает, как ожидалось:
$("#loaderImg").show();
setTimeout(function(){
$("#progress").html("Process end");
},3000);
$("#loaderImg").hide();
Шкура функция будет вызвана, прежде чем 3 секунды будут завершены.
Это может помочь, если вы хотите, чтобы скрыть загрузчик после 3secs:
$("#loaderImg").show();
setTimeout(function(){
$("#progress").html("Process end");
$("#loaderImg").hide();
},3000);
Кроме того, только потому, что setTimeout()
бежит из синхронизации с последовательностью, не означает, что она повышает производительность, так как его работы в том же потоке ,
Пример, который не работает, как ожидалось:
$(function() {
$('div').html("Started");
setTimeout(function(){
$('div').html("Working");
},3000);
$('div').html("Finished");
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
</div>
Конечно, вы можете заметить, как последовательность идет в приведенном выше фрагменте кода.
Некоторые рабочий код:
$(function() {
$('div').html("Started");
$('div').html("Working");
setTimeout(function() {
$('div').html("Finished");
}, 3000);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
</div>
проверить этот ответ: http://stackoverflow.com/questions/16599915/loading-indicator-on-synchronous-ajax/16600345#16600345 – Baahubali
@ user1490835 он не связан с Ajax. – svk
Демо работает отлично. Что делает ваш реальный код?предоставить [mcve] – charlietfl