@BarneyGumble

Как сделать ajax-запрос только по завершении предыдущего?

У меня есть массив url-адресов:

hotelsArray = [
    "http://site1.ru",
    "http://site2.ru",
    "http://site3.ru",
    "http://site4.ru",
    "http://site5.ru"    
];


Я хочу пройтись по нему в цикле и отправить на каждый url ajax-запрос. Если я делаю вот так, то у меня скопом посылаются несколько запросов. Если представить, что в массиве не 5 позиций, а 500, то, проблема зависания всего и вся очевидна:

$.each(hotelsArray,function(index,value){
    $.ajax({
        type: 'GET',
        url: '/server.php?url='+value,
        success: function(data){
            console.log(data);
        }
    });
});


Как в цикле можно сделать так, чтобы каждый следующий ajax-запрос посылался только после завершения предыдущего?
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
Нужно использовать асинхронный reduce: https://jsfiddle.net/h0kbpwvu/2/
Ну и использовать что-то, что возвращает Promise, а не использует callback, например fetch или axios.
Также можно промисифицировать Jquery, но это путь в никуда. Лучше от него вообще отказаться.

function asyncAjax(url) {
  return new Promice((success, error) => {
    $.ajax({
        type: 'GET',
        url,
        success,
        error
    });
  });
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Artezio Санкт-Петербург
от 160 000 до 220 000 ₽
07 мар. 2021, в 23:34
5000 руб./за проект
07 мар. 2021, в 23:14
10000 руб./за проект