google-calendar-api - 通过一次又一次单击“插入”按钮,Google 插入事件在 Google 日历中重复
问题描述
我使用了一个按钮来插入事件,但是当我再次单击按钮时,它再次插入并创建了事件的重复副本。有没有办法只插入最新事件。
{
var request;
for (var j = 0; j < this.state.syncEvent.length; j++) {
console.log("J loop", this.state.syncEvent[j]);
request = function (resource) {
return gapi.client.calendar.events.insert({
'calendarId': 'primary',
'eventId': resource
});
}(this.state.syncEvent[j]);
request.execute(function (resp: any) {
console.log(resp);
});
}
}
解决方案
如果您要插入具有预定义事件 ID 的事件 - 首先检查具有此 ID 的事件是否已存在
首先,您的代码存在一些问题。
查看文档中的 Javasript 示例:
正确的语法是:
var request = gapi.client.calendar.events.insert({
'calendarId': 'primary',
'resource': event
});
whereevent
是类型的事件资源
var event = {
...
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles'
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles'
},
'id': SPECIFY_HERE_THE_EVENT_ID,
...
};
事件资源必须包含Required Properties
end
和start
,此外,您还需要指定方法文档中提到的其他属性,例如 summary
或id
。
现在,由于可以从您的代码片段中推断出您将事件 id 传递给您的函数 - 在插入事件之前,您可以使用事件方法进行检查:获取具有给定 id 的事件已经存在。
或者,您也可以使用方法Events: list来检索日历中已经存在的事件。因此,您可以使用查询参数q
进行过滤,例如summary
,或者您可以通过指定参数timeMax
和timeMin
- 进行查询,具体取决于您的用例。
您需要做的就是实现一个条件语句,仅当Events: get
或Events: list
不返回具有指定参数的现有事件时才创建新事件。
推荐阅读
- javascript - javascript 如何使用未包含在 javascript 中的 Web 浏览器的功能
- android - 一个应用程序是否有可能拥有多个 CastOptionsProvider,作为投射到 2 个不同的接收器应用程序的一种方式?
- flutter - 动态创建数据时未绘制饼图 - 颤振,谷歌饼图库
- laravel - 用于电报的 Botman Laravel - Laravel 5
- video - 如何在 QnA maker 中添加视频 (.MP4) 文件?
- python - 将色轮划分为纯色段
- listview - 如何使 Qt5 QML Horizontal Listview 启用鼠标滚动?
- android - 我可以在 Android 应用程序中使用 BLE 扫描来扫描普通蓝牙设备并获取 RSSI 值和时间戳以进行距离计算吗?
- typescript - 无法在 VSCode 中使用 TypeScript 运行 Mocha 测试
- image-processing - 我们可以使用 Palantir Foundry 进行图像处理吗?