Ваш setTimeout
не будет аккуратно приостанавливать код на одну секунду: он просто установит таймер для (пустого, в вашем случае) события, которое пройдет через определенное время. Остальная часть сценария будет продолжаться параллельно с этим.
Таким образом, вы в настоящее время вызываете свою функцию рекурсии намного чаще, чем вы думаете. Это твоя первая проблема.
Ваша самая большая проблема, однако, заключается в том, что независимо от того, что вы делаете в результате своего поста, это полностью в другой сфере, и вы не сможете выйти из функции Loop
оттуда. В вашем коде нет ничего, что могло бы нарушить рекурсию, поэтому оно бесконечно, и очень быстро, и помимо этого отправляет запросы Ajax.
Вам нужно более подробно описать, чего вы хотите достичь, и, возможно, кто-то может показать вам, как вы должны это сделать. Единственное, что точно, это то, что вам нужно использовать обратные вызовы. Я написал пример, но он делает много предположений. Это много приближений к тому, что я думаю вы, возможно, захотите достичь, но, без сомнения, вам придется немного подстроить это под свои нужды. Надеюсь, это даст вам представление о рабочем процессе, который вам нужно использовать:
function Loop() {
$.get(url, data, function(result) {
for loop to render the result {
// render the result here
}
// this is what you're looping over in your second loop
var postQueue = result.someArray;
renderChildData(postQueue, 0);
}, "json");
}
function renderChildData(array, index) {
// this is just one item in the loop
var currentItem = array[index];
$.post(url, currentItem, function(postResult) {
// we have received the result for one item
// render it, and proceed to fetch the next item in the list
index++;
if(index < array.length) {
renderChildData(array, index);
}
});
}