javascript在多次异步函数调用后执行函数
我试图在发出多个请求后调用函数。javascript在多次异步函数调用后执行函数,javascript,jquery,Javascript,Jquery,我试图在发出多个请求后调用函数。loadEventsFromCalendar函数发送访问每个日历的事件数据的请求,然后将其存储到json\u event\u列表中。renderTimeline函数获取这个大列表并在此基础上绘制可视化 function loadFromAllCalendars(calendarNames){ var dfd_lst=[]; //Load events from all selected calendars for (var i =0; i&
loadEventsFromCalendar
函数发送访问每个日历的事件数据的请求,然后将其存储到json\u event\u列表中。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);
}
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()
});
}
函数加载来自所有日历(日历名称){
var dfd_lst=[];
//从所有选定日历加载事件
对于(var i=0;i使用promiseall()
等待多个承诺得到解决
Promise.all([promise1, promise2, promise2]);
延迟对象方法不能很好地工作,因为即使请求没有执行(即函数中没有返回),然后将一个未定义的值存储到DFDlst中,以某种方式执行.done
。我通过在loadEventsFromCalendar
中添加一个额外的布尔参数renderVis
来解决此问题,以指定是否渲染:
function loadEventsFromCalendar(calendarId,calendarName,renderVis=false) {
// 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){
....
....
if (renderVis){
renderTimeline();
}
}
}
renderTimeline
是否希望传递参数?解决方案是不使用$.when()
,$.Deferred(),Deferred.done()
?是的,布尔参数是一种解决方法,不需要使用延迟对象。在使用$的问题中,答案与实际的javascript
有什么关系?
function loadEventsFromCalendar(calendarId,calendarName,renderVis=false) {
// 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){
....
....
if (renderVis){
renderTimeline();
}
}
}