问题是

我正在try 使用JavaScript在我的Chrome扩展上包含即将到来的Google Calendar活动的简单显示,所以我一直在使用Google Calendar API.问题是,一旦我登录,即将到来的事件就会正确显示,但如果我在Gcal上添加事件(不是通过Chrome扩展,而是在Gcal本身上),并try 重新获取新事件,则只会显示旧事件.即使我注销并重新进行身份验证,新事件也永远不会出现.

奇怪的是,这只发生在我的一些日历上,我注意到的一件事是,如果我完全创建了一个新日历,刷新确实会获取新的事件.

我所try 的

作为一名开发人员,我对使用Google API非常陌生,所以任何建议或方向都会有所帮助!

基本上,我有一个功能,可以在你登录后从Gcal获取事件,我想这也可以作为我的刷新按钮,因为它应该重新获取所有的数据?然而,当我测试它时,它在我的Gcal上的一些日历上不起作用.我认为这可能是缓存的问题,所以我try 删除缓存/在头文件中包含此标记'Cache-Control': 'no-cache'编码>以获取日历数据,但也不起作用.

编码

这是我现在获取事件的函数:

chrome.identity.getAuthToken({interactive: true}, function(token) {
    if (chrome.runtime.lastError) {
      return;
    }
  
    console.log("Authentication successful. Token:", token);
    isSignedIn = true;
    localStorage.setItem('gcal-signed-in',"true");
  
    var init = {
      method: 'GET',
      async: true,
      headers: {
        Authorization: 'Bearer ' + token,
        'Content-Type': 'application/json',
        'Cache-Control': 'no-cache'
      },
      'contentType': 'json'
    };

    const now = new Date();
    const isoNow = now.toISOString();
    const maxResults = 4;
  
    // getting all calendars
    fetch(`https://www.googleapis.com/calendar/v3/users/me/calendarList`, init)
    .then(response => response.json())
    .then(calendarListData => {
      calendarIds = calendarListData.items.map(calendar => calendar.id);

      const fetchPromises = [];
      let events = new Map();
      // getting most top recent events of each calendar
      for (const calendarId of calendarIds) {
        const fetchPromise = fetch(`https://www.googleapis.com/calendar/v3/calendars/${calendarId}/events?maxResults=${maxResults}&timeMin=${isoNow}`, init)
        .then((response) => response.json())
        .then((data) => {
          if (data.items) {
            data.items.forEach((event) => {
              const dateTimeParts = event.start.dateTime.split('T');
              const date = dateTimeParts[0];
              const time = dateTimeParts[1].substring(0, 5);
              const location = event.location; 
              console.log(location)
              
              // trim gets rid of leading and trailing white space/commas
              events.set([date, time], [event.summary.trim(),location]);
            });
          } else {
            console.log("No upcoming events found.");
          }
        })
        .catch((error) => {
          console.error("Error fetching events:", error);
        });
        fetchPromises.push(fetchPromise);
      }
// a bit more 编码 after this to display the data using Promise.all(fetchPromises)
编码>

谢谢你!如有任何帮助,我们不胜感激

推荐答案

try 删除URL中的MaxResults.

Javascript相关问答推荐

除了在Angular 16中使用快照之外,什么是可行且更灵活的替代方案?

获取表格的左滚动位置

根据总价格对航班优惠数组进行排序并检索前五个结果- Angular HTTP请求

给定一个凸多边形作为一组边,如何根据到最近边的距离填充里面的区域

有没有可能使滑动img动画以更快的速度连续?

空的结果抓取网站与Fetch和Cheerio

在我的html表单中的用户输入没有被传送到我的google表单中

简单的PayPal按钮集成导致404错误

如何解决useState错误—setSelect Image不是函数''

Websocket错误—有一个或多个保留位开启:reserved1 = 1,reserved2 = 0,reserved3 = 0

编辑文本无响应.onClick(扩展脚本)

提交链接到AJAX数据结果的表单

本地库中的chartjs-4.4.2和chartjs-plugin-注解

覆盖加载器页面避免对页面上的元素进行操作

第一项杀死下一项,直到数组长度在javascript中等于1

在Odoo中如何以编程方式在POS中添加产品

FileReader()不能处理Firefox和GiB文件

无法使用npm install安装react-dom、react和next

如何使用puppeteer操作所有选项

如何在TransformControls模式下只保留箭头进行翻译?