Как заставить Ajax ждать условия?

#javascript #jquery #ajax #promise #jquery-deferred

#javascript #jquery #ajax #обещание #jquery-отложенный

Вопрос:

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

 $(document).ready( function () {

// here, clients = [{'client': 1, 'loaded': false}, {'client': 2, 'loaded': false}, ...]
    
$.each(clients, function(index, value){ 
        if (!value.loaded){
            $.ajax({ url: 'loadclient',
                    data: {client: value.client},
                    dataType:'json',
                    success: function (response) {
                                value.loaded = true;
                             }
                    });
        };
     });
});

  

Пока клиенты загружаются, я хочу отобразить представление загруженных клиентов. Затем у меня есть выпадающий список, в котором пользователи могут выбрать, какой клиент получить. Дело в том, что я хочу показать данные, если загружен выбранный клиент, ИЛИ подождать, пока клиент, наконец, загрузится, а затем покажет данные. Когда пользователь выбирает клиента, у меня есть несколько вызовов ajax для построения представления. Вот пример одного из них:

 function get_SFN(){
    $.ajax({url: 'update_sfn',
        data: {client: client},
        dataType:'json',
        success: function (response) {
            
            var risks = response.risks;
            var values = response.values;
            
            buildGraphSFN(risks, values) ;

        }
    });
};
  

Когда пользователь выбирает клиента, мне нужно проверить, загружен ли он. Если оно не загружено, я хочу дождаться, пока это условие будет выполнено, а затем запустить второй ajax.

Как я могу это исправить?

Комментарии:

1. НЕ делайте http-запросы в цикле.

2. У вас есть предложения о том, как с этим справиться?