我正在使用一些使用谷歌api的应用程序。我拥有的是下面的东西。我使用警报来查看数据的显示方式。警报的顺序位于片段下方,假设只有3个事件,并且每个事件都在重复发生。
function handleAuthResult2(authResult){
if (authResult) {
gapi.client.load('calendar', 'v3', function() {
var request = gapi.client.calendar.events.list({
calendarId: 'primary',
timeMin: '<%=String.format('%tFT%<tT-00:00', new Date())%>'
});
request.execute(function(resp) {
for (var i = 0; i < resp.items.length; i++) {
if (resp.items[i].recurrence){
var request2 = gapi.client.calendar.events.instances({
calendarId: 'primary',
eventId: resp.items[i].id
});
request2.execute(function(resp2){
alert('Recurring event original start time: ' + resp2.items[0].originalStartTime)
});
}
alert('Event summary: ' + resp.items[i].summary)
}
});
});
}
}
警报显示的顺序:
Event summary: Some summary 1
Event summary: Some summary 2
Event summary: Some summary 3
Recurring event original start time: May 5, 2013
Recurring event original start time: May 6, 2013
Recurring event original start time: May 7, 2013
我想要显示的提醒顺序:
Recurring event original start time: May 5, 2013
Event summary: Some summary 1
Recurring event original start time: May 6, 2013
Event summary: Some summary 2
Recurring event original start time: May 7, 2013
Event summary: Some summary 3
这就是为什么我要解决此问题:我的应用程序显示用户日历中即将发生的事件。由于重复发生的事件不会在'list'方法中显示下一个事件,因此我正在使用'instances'方法检索特定的详细信息。我把细节放在一张桌子里,看起来像是:
**| Upcoming Event | Date |**
| Event 1 | October 3 |
| Event 2 | October 7 |
| Recurring event 1 | | //should show October 8
| Event 3 | Ocober 11 |
| Recurring event 2 | | //should show October 12
| Event 4 | October 15October 8October 12|
答案 0 :(得分:0)
当第一次请求(即gapi.client.calendar.events.list)时,由于方法之外没有任何内容,它会等待它从服务器获得响应。一旦进入for循环,它就开始执行,当控制到达request2.execute(函数(resp2)时,请求将被发送到gapi.client.calendar.events.instances并且请求方法不会等待服务器响应作为执行操作是异步的。在第一个请求中,执行方法必须等待,因为请求操作后没有代码。但是在第二个请求警报之后(&#39;事件摘要:&#39; + resp。 items [i] .summary)可以执行。由于这个原因,输出是:
活动摘要:一些摘要1
活动摘要:一些摘要2
活动摘要:一些摘要3
重复活动原始开始时间:2013年5月5日
重复活动原始开始时间:2013年5月6日
重复活动原始开始时间:2013年5月7日
答案 1 :(得分:0)
您可以在列表请求中使用singleEvents = true参数来避免第二次调用。这将要求服务器立即为您进行重复的事件扩展。