代码之家  ›  专栏  ›  技术社区  ›  Robert Andrews

为什么我的应用程序脚本突然停止工作?

  •  0
  • Robert Andrews  · 技术社区  · 6 年前

    我在谷歌表单中使用了以下应用程序脚本代码,几个月来没有出现任何问题。

    它在每天晚上9点到10点由时间触发器触发,从我的谷歌日历中获取当天的每个事件,并将包含这些细节的对应行添加到谷歌工作表中。

    // Add Google Calendar events to Google Sheets.
    // Sheet row additions to fire Zapier ClickTime actions.
    // Script originally from https://blog.ouseful.info/2010/03/05/grabbing-google-calendar-event-details-into-a-spreadsheet/
    
    function caltest3(){
      //http://www.google.com/google-d-s/scripts/class_calendar.html#getEvents
      // The code below will retrieve events between 2 dates for the user's default calendar and
      // display the events the current spreadsheet
      var cal = CalendarApp.getDefaultCalendar();
      var sheet = SpreadsheetApp.getActiveSheet();
    
      // Today's date, via https://stackoverflow.com/questions/46548281/how-to-reference-todays-date-in-javascript
      var today = new Date();
      var dd = today.getDate();
      var mm = today.getMonth();
      var yyyy = today.getFullYear();
    
    
      // Use Google Calendar classes, https://developers.google.com/apps-script/reference/spreadsheet/sheet#appendRow(Object):
    
      // Get all events between this range
      var events = cal.getEvents(new Date(yyyy, mm, dd, 0, 0, 0), new Date(yyyy, mm, dd, 23, 0, 0));
    
      // For every event, 
      for (var i=0;i<events.length;i++) {
    
        // Calculate hour length of event
        var hours = Math.abs(events[i].getEndTime() - events[i].getStartTime()) / 36e5;
    
        // Combine elements of event
        // var details=[[events[i].getStartTime(),  events[i].getEndTime(), hours, events[i].getTitle(), events[i].getDescription()]];
    
        // Appends a new row with columns to the bottom of the spreadsheet containing the values in the array
        sheet.appendRow([events[i].getStartTime(),  events[i].getEndTime(), hours, events[i].getTitle(), events[i].getDescription()]);
    
      }
    }
    

    但是,一夜之间,我从谷歌收到了这条消息。。。

    您的脚本Calendar Transfer最近未能完成 成功地故障摘要如下所示。要配置 此脚本的触发器,或更改接收的设置 以后的故障通知,请单击此处。

    该脚本由文档日历列表使用。

    enter image description here 真诚地,谷歌应用程序脚本

    最后一次成功添加行是在2月15日。在2月16日或17日,没有可添加的事件,因此2月18日是第一次失败。

    这是怎么回事?

    是否与从传统日历切换到新日历有关?

    或者看起来它在添加到表单时遇到了一些问题?

    第34行是标记的最后一行 Appends a new row ... .

    1 回复  |  直到 6 年前
        1
  •  1
  •   Community PPrice    4 年前

    我在这个网站上搜索并在谷歌上搜索“服务超时”错误。看起来,这个错误意味着谷歌服务器的响应速度不够快。

    注意:Google服务器的响应时间不是确定的。有时他们比其他人快,希望很少有人因为速度太慢而出现“服务超时”错误。

    一种解决方案是使用 exponential backoff 布鲁斯·麦弗逊的图书馆或类似的图书馆。

    什么是指数退避

    这是建议用于呼叫速率受限的服务的技术。如果检测到它们失败,并且出现可以使用特殊等待算法恢复的错误,则将重试几次。这是一种比使用实用程序更好的技术。在每次调用之间休眠,因为它只在需要时等待,因此不会浪费任何执行时间。

    另一种方法是创建脚本变量,以便在时间驱动触发脚本失败时运行。

    参考文献: