I've been facing a problem when I'm trying to add multiple events to a Google Calendar via javascript v3 api.
I have an array which entries are events like these:
newEvent = { "summary": response[i].name+" BDay!!", "start": { "dateTime": date }, "end": { "dateTime": date } }; events[i]=newEvent;
After, I make a call to Google Calendar api in order to add the events:
var request;
for(var j = 0; j<events.length; j++) {
console.log(events[j]);
request = gapi.client.calendar.events.insert({
'calendarId': calendarId,
'resource': events[j]
});
request.execute(function(resp) {
console.log(resp);
});
}
However, it turns out that all the events are placed in the same date into the calendar(which actually is the last date in array events[]). I believe that it could be because the requests are callback functions, but I'm not sure.
Would appreciate the help!
events[j]
is being rebound on each iteration of the for loop. Try using an anonymous function to bind to the correct event:See the following question for more details on JavaScript arrays and closures: JavaScript closure inside loops – simple practical example
Here is an easier-to-read version of the code above that moves all the processing into a function:
As soredive, Mentioned, you need to use batch to add multiple events
why batch? The primary reason to use the batch API is to reduce network overhead and thus increase performance.
example:
If you want to insert multiple events at once, you should use batch.