@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-запрос посылался только после завершения предыдущего?
  • Вопрос задан
  • 198 просмотров
Пригласить эксперта
Ответы на вопрос 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
    });
  });
}
Ответ написан
Ваш ответ на вопрос

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

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