Как правильно использовать jQuery Deferred внутри циклаJquery

Программирование на jquery
Ответить
Anonymous
 Как правильно использовать jQuery Deferred внутри цикла

Сообщение Anonymous »

Я пытаюсь вызвать функцию, которая проходит по набору данных и обновляет значения в этом наборе данных на основе данных, поступающих из асинхронной функции. Очевидно, мне нужно знать, когда эта функция завершит цикл и обновится.
Вот что у меня сейчас есть:

Код: Выделить всё

function loadStationData() {
var $dfd = $.Deferred();
$.getJSON('../backend/navigation/get-stations.php', function(data) {
stationData = data;
$dfd.resolve();
});
return $dfd.promise();
}

function updateStationData() {
var $dfd = $.Deferred();
$.each(stationData, (i,v) => {
var $dfd2 = $.Deferred();
$.when(getFullCoordPack(v.lat, v.lng)).then(function(coords) {
delete v.lat;
delete v.lng;
v.coords = coords;
$dfd2.resolve();
});
return $dfd2.promise();
});
return $dfd.promise();
}

$.when(loadStationData(), updateStationData()).then(() => {
// do stuff
});
Функция getFullCoordPack(v.lat, v.lng) использует API What3Words и, следовательно, содержит вызов AJAX, поэтому требует обещания после его завершения.
Однако я изо всех сил пытаюсь понять, как использовать объект Deferred во второй функции, и мне нужен совет, как лучше всего достичь моей цели. Первая функция работает нормально.

Подробнее здесь: https://stackoverflow.com/questions/748 ... -of-a-loop
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»