Я пытаюсь вызвать функцию после отправки нескольких запросов. Функция loadEventsFromCalendar
отправляет запросы на получение данных о событиях для каждого календаря, а затем сохраняет их в json_event_list
. Функция renderTimeline
принимает этот большой список и рисует визуализацию, основанную на этом.Функция выполнения javascript после нескольких асинхронных вызовов функций
function loadFromAllCalendars(calendarNames){
var dfd_lst=[];
//Load events from all selected calendars
for (var i =0; i<calendarNames.length;i++){
dfd_lst.push(loadEventsFromCalendar(calendarNameIds[calendarNames[i]],calendarNames[i]));
}
$.when.apply($,dfd_lst).done(renderTimeline);
}
function loadEventsFromCalendar(calendarId,calendarName) {
var dfd = $.Deferred();
// Add events from calendar corresponding to the given calendarId into json_event_lst.
var request = gapi.client.calendar.events.list({
'calendarId': calendarId,
'timeMin': startdate.toISOString(),
'showDeleted': false,
'singleEvents': true,
'maxResults': 50,
'orderBy': 'startTime'
});
request.execute(function(resp) {
....data processing of json_event...
json_event_lst.push(json_event)
dfd.resolve();
return dfd.promise()
});
}
Я попытался с помощью Jquery отложенного объекта, чтобы проверить, если обещания будут выполнены, но функция renderTimeline еще вызывается до того, как массив данных заполняются.
function loadFromAllCalendars(calendarNames){
var dfd_lst=[];
//Load events from all selected calendars
for (var i =0; i<calendarNames.length;i++){
dfd_lst.push(loadEventsFromCalendar(calendarNameIds[calendarNames[i]],calendarNames[i]));
}
$.when.apply($,dfd_lst).done(renderTimeline);
}
ли 'renderTimeline' ожидать параметр будет принят? – guest271314