2013-04-01 2 views
0

Не могу обернуть голову вокруг этого?
ПОЧЕМУ ЭТО, ЧТО МОЙ:
. Вся петля проходит прямо, несмотря на то, что я затормаживаю вещи на 1000 мс за цикл?
Проблема в том, что команда window.location.href работает Досрочно до SetTimeout закончил? То же самое для функции stopload(), которая также заканчивается раньше? Я видел что-то о рекурсивных функциях setTimeout, что нужно здесь и как это реализовать?Запретить запуск JS-кода, прежде чем функция завершится

function shop(clickedButton) 
{ 
    var buttonvalue = $(clickedButton).val(); 
    startLoad(); 
    pdel = 1000; 

    $("input:submit[value='buy']").each(function(index) 
    { 
    if(index != 1) 
    { 

     $("#backgroundPopup").text(index); 
     var submithing = this; 
     setTimeout(function(){ clicksubmitbutton(submithing); },pdel); 
     pdel += 1000; 
    }      
    }); 

    stopLoad(); 

    if(buttonvalue == "1") 
    { 
    window.scrollTo(0,0); 
    } 
    else 
    { 
    window.location.href = 'http://my.url'; 
    }      

}

+2

'setTimeout' ничего не заглохнуть. Вы просто скажете, что JavaScript выполнит что-то в будущем, * после того, как * завершение текущего скрипта завершено. Если вы хотите выполнить что-то после таймаута, вы должны поместить его в/звонок из таймаута. –

ответ

2

Javascript не имеет ни малейшего представления о сне, или киоске. Выполнение продолжается прямо после вызова setTimeout. Эта функция просто планирует функцию, которая будет запускаться после заданного количества миллисекунд.

Чтобы получить желаемое поведение, вам необходимо вызвать следующую итерацию в функции обратного вызова setTimeout.

Что-то вроде:

function submitTheThing(index) { 
    if (done) { //some logic 
     return; 
    } 

    // do something 

    setTimeout(function() { submitTheThing(index+1); }, 1000); 
} 
Смежные вопросы