Я использую jQuery, и у меня есть цикл асинхронных запросов AJAX. Я знаю, что могу дождаться, когда все они будут закончены, используя удобный метод $ .when.apply (array_of_requests) .then().Как подождать, пока вложенные запросы async jQuery завершатся AJAX?
Но у меня также есть еще один набор запросов AJAX, которые выполняются только после завершения каждого из первых запросов. Я хочу подождать, пока они тоже закончатся, но я не уверен на 100%, что нашел лучший способ.
Вот упрощенный пример моих запросов:
var intital_data = [1,2,3,4,5,6,7,8,9,10];
var promises = [];
var promises_inner = [];
$.each(intitial_data, function(i, n) {
var ajax_call = $.ajax({url:'http://www.domain.com/etc/'+n});
promises.push(ajax_call);
ajax_call.done(function(data) {
var ajax_call_inner = $.ajax({url:'http://www.domain.com/etc/'+data.result});
promises_inner.push(ajax_call_inner);
ajax_call_inner.done(function(data) {
// Do something with the content of data here.
});
});
});
Так что, когда каждый из десяти петельные AJAX запросов будет сделано, я делаю второй запрос AJAX на основе результатов первого. Все работает отлично.
я тогда что-то вроде этого, потому что я хочу, чтобы ждать, пока оба первых десяти запросов (хранится в массиве обещаний) и второй лот (хранится в promises_inner) завершены:
$.when.apply($, promises).then(
function() {
// The ten outer AJAX calls are finished now.
$.when.apply($, promises_inner).then(
function() {
// The inner AJAX calls are finished now.
}
);
}
);
В первой функции $ .when.apply(). Then() 'done' вторая партия запросов еще не завершена или даже добавлена в массив promises_inner. Но я обнаружил, что добавление вложенных $ .when.apply(). Then(), похоже, работает - в своей «готовой» функции все запросы завершены.
Но я не уверен, что это лучшее и самое надежное решение. Я беспокоюсь, что он работает только по совпадению - это вызывает достаточно задержки для завершения звонков, а не логического смысла.
Есть ли лучшее, более твердое твердое решение? Благодарю.
я говорил слишком рано, когда я сказал, что это похоже на работу. Иногда это работает, но в других случаях, promises_inner не было все из вложенное объявление AJAX до сих пор. Поэтому иногда внутренние $. Происходит, прежде чем все будет возвращено. –