Следующий код запрашивает json-данные из URL-адреса. После того, как он имеет эти данные, он запускает функцию .each для каждого элемента в json-данных. Для примера я уменьшил функцию .each, просто выполнив document.write с каждым значением из json и предупредив «закончен» после его окончания.Включить setTimeout В jQuery .each
Если я удалю setTimeout, тогда код работает так, как должен, сначала заканчивая все команды .each, а затем завершая предупреждение. Однако, с помощью setTimeout, он предупреждает о завершении до того, как он выполнит все команды .each.
У меня сама задержка работает отлично, однако код ПОСЛЕ первоначальной задержки выполняется немедленно, не дожидаясь выполнения всех команд .each. Вот код:
$.ajax({
type: "GET",
url: 'url to json data',
dataType: "json",
success: function(data) {
var time = 10;
$.each(data, function(key, val) {
setTimeout(function() {
document.write(val.term);
return;
}, time); time += 10;
});
alert('finished');
},
error: function() {}
})
Как я могу держать задержку во время прохода через команду .each и только тогда, когда она будет закончена перебор всех команд .each, бдительная 'закончила?
«с SetTimeout, она оповещения закончена прежде, чем она выполняет все команды .each». Да, это то, что делает 'setTimeout'. Он запускает заданную функцию после X ms. Это * асинхронно *. Остальная часть вашего кода запускается, затем 'setTimeout' запускается через некоторое время. –
Могу ли я спросить, почему вы используете 'document.write()'? Это редко нужно использовать ... – Dom
... и почему вы хотите использовать setTimeout в этом конкретном случае использования? – meavo