从google calendar api中的事件列表中检索实例

时间:2014-11-18 23:56:34

标签: javascript html json google-api google-calendar-api

我正在使用一些使用谷歌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|

2 个答案:

答案 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日

以下是文档的link和Java脚本中的promises的link,可以帮助您。

答案 1 :(得分:0)

您可以在列表请求中使用singleEvents = true参数来避免第二次调用。这将要求服务器立即为您进行重复的事件扩展。