我无法确定通过Google API获取数据的正确方法。
以下是示例:我有一个带控制器和服务的组件:
在我的控制器中,我有一个调用服务来获取数据的方法:
getCalendarEvents() {
this.service.getCalendarEvents().then(events => {
this.calendarEvents = events;
//this.$scope.$apply();
});
}
在我的服务中,我有一个同名的方法来检索数据:
getCalendarEvents() {
return gapi.client.calendar.calendarList.list().then(response => {
if (response.result.items === undefined) return [];
let requests = response.result.items.map(calendar => {
let params = { calendarId: calendar.id, timeMin: (new Date()).toISOString(), showDeleted: false, singleEvents: true, maxResults: 10 };
return gapi.client.calendar.events.list(params)
.then(response => {
let events: any = response.result.items;
return events.map(event => {
let calendarEvent: CalendarEvent = {
id: event.id,
summary: event.summary,
htmlLink: event.htmlLink,
start: new Date(event.start.date == undefined ? event.start.dateTime == undefined ? '' : event.start.dateTime : event.start.date),
end: new Date(event.end.date == undefined ? event.end.dateTime == undefined ? '' : event.end.dateTime : event.end.date)
};
});
});
});
return this.$q.all(requests);
});
}
它的作用是首先调用Google API以检索当前用户的所有日历:
gapi.client.calendar.calendarList.list()
然后,对于返回列表中的每个日历,我需要调用以通过calendar.id属性检索与此日历关联的事件作为发送请求以获取事件的参数:
gapi.client.calendar.events.list(params)
所有这些电话都是基于承诺。 我需要向控制器返回一个承诺,该承诺将返回所有日历的所有事件。
所以,让我们说,我有3个日历:我的日历(A),我的兄弟日历(B)和生日日历(C)。 因此,如果我在日历A中有5个事件,在日历B中有3个事件,在日历C中有2个事件,我必须一起返回一个包含10个事件的事件。
我正在使用map()函数将响应组合在一起,但在我的控制器中,我收到了3个事件数组(3个日历)。相反,我想收到一个包含10个事件的数组,正如我之前所解释的那样。
我做错了什么?