Имеется следующий js-файлик:
$(document).ready(function() {
$("#search_posts_by_groups_form2").submit(function(e){
e.preventDefault();
var groupArray = new Array();
var token = $('#token')[0].value;
if (token.trim() == ""){alert('Введите Токен');return false;}
var delim = $('#search_delim')[0].value;
var groups_id = $('#search_groups')[0].value;
// Получаем список сообществ
var groups_arr = groups_id.split(delim);
var groupsSize = groups_arr.length;
var k = 0;
var checkSum = 0;
var groupIDArray = new Array();
$.each(groups_arr, function(i, group_id) {
groupIDArray[k] = group_id;
++k;
});
var dfd = initGroupInfo(token, groupArray, groupIDArray, 0);
dfd.done(function(){
console.log('Закончили. Можно запускать другую функцию!')
});
});
});
function initGroupInfo(token, groupArray, groupIDArray, currentGroupIDIndex){
var dfd = $.Deferred();
var group_id = groupIDArray[currentGroupIDIndex];
var promisedCalbackGroup = callbackGroup(token, group_id);
promisedCalbackGroup.done(
function(data){
var obj = data.response;
if (obj){
if (obj[0]){
group_id = groupIDArray[currentGroupIDIndex];
groupArray[group_id] = new Object();
groupArray[group_id].group = obj[0];
console.log('Загрузка информации о группе: ' + group_id);
if ( (groupIDArray.length - currentGroupIDIndex) > 1){
initGroupInfo(token, groupArray, groupIDArray, ++currentGroupIDIndex);
}else{
console.log('Загрузка информации о группах завершена');
dfd.resolve();
}
}else{
console.log('Ошибка: initGroupInfo(2)');
}
}else{
console.log('Ошибка: initGroupInfo(1)');
}
}
);
return dfd.promise();
};
function callbackGroup(token, group_id){
return $.ajax({
url: 'https://api.vk.com/method/groups.getById?v=5.52&access_token=' + token + '&group_id=' + group_id,
type: 'GET',
async: true,
dataType: 'jsonp',
crossDomain: true
});
};
Я пытаюсь вызвать асинхронные запросы последовательно. Имеется список групп. Необходимо последовательно вызвать ajax и обработать полученные результаты так, чтобы выполнение следующего ajax-запроса начиналось после завершения обработки выполнения результатов предыдущего запроса. Помимо этого я хочу отследить выполнение initGroupInfo, чтобы после него запустить другую функцию. Проблема в том, что у меня мало знаний по promise и deffered.
Я не представляю, как правильно вызвать resolve и потому код не работает. Я гуглил, но те примеры, которые я встречал не имеют ничего общего с моей ситуацией.