hummingbird
@hummingbird

Как сделать задержку в цикле, пока не получен ajax ответ?

Есть такая функция:
window.getSomething = function(ids) {
	ids.forEach(function(id, i) {
		setTimeout((function() {
			loadSomething(id);
		}), 1000 * ++i);
	});
};


Каждую итерацию отправляется ajax запрос (функция loadSomething();). Но проблема вот в чем: я хочу четкой поочередности, а с этим куском это не выходит. Если ответ задерживается, то setTimeout это не волнует и цикл идет дальше, тем самым отправляя все новые и новые запросы.

Например, у нас 10 итераций. То есть 10 ajax запросов. Как сделать так, чтобы следующее выполнении функции loadSomething(); осуществлялось только после того, как предыдущий запрос вернул ответ (закончил работу)?
  • Вопрос задан
  • 645 просмотров
Пригласить эксперта
Ответы на вопрос 1
@DanSorokin
Full-stack developer at onvoya.com
Используйте промисы. Сделайте так, чтобы при каждой итерации цикла у вас промис добавлялся в общий массив промисов, а потом пользуясь Promise.all ресолвите их.
Код примерно такой
var promises = [];
ids.forEach(function(id, i) {
 promise = loadSomething(id);
 promises.push(promise);
});
Promise.all(promises);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы