串行化继续Google Apps脚本时出现意外异常

时间:2013-02-19 00:17:32

标签: google-apps-script google-calendar-api google-sheets google-cloud-sql

我最近在尝试调试时,在电子表格Google Apps脚本上开始收到错误“序列化延续时出现意外异常”。在我创建与Google CloudSQL api的连接后,错误似乎就开始了。即使在注释掉jdbc对象构造函数之后,仍会发生此错误。似乎其他人遇到了这个问题,需要Google Tech来解决这个问题。

我已经搜索了所有的讨论板,找不到解决这个问题的方法。有没有机会在那里有一个Google技术人员可以为我介绍一下?如果我能确定实际触发错误的行,我会发布代码。

编辑:

好的,我想我已经发现了错误发生的地方。似乎是

var response = UrlFetchApp.fetch(url + nextPage,oauth_options);
在while循环中

。这是整个功能代码。

function retrieveEvents(endTimeMinimum, updatedAfter, orderBy){      
//var url = 'https://www.googleapis.com/calendar/v3/calendars/' + source_cal + '/events?key=' + api_key + "&futureevents=true&orderBy=updated&sortOrder=descending&updatedMin=" + last_sync_date_formated;
//var url = 'https://www.googleapis.com/calendar/v3/calendars/' + source_cal + '/events?key=' + api_key + "&orderBy=updated&sortOrder=descending&updatedMin=" + last_sync_date_formated;

   var url = 'https://www.googleapis.com/calendar/v3/calendars/' + source_cal + '/events?key=' + api_key + "&singleEvents=true";

   if ((orderBy != null) && (orderBy != "")){
     url += "&orderBy=" + orderBy;
   }
   else url += "&orderBy=updated";

   if ((updatedAfter != null) && (updatedAfter != "")){
     url += "&updatedMin=" + updatedAfter;
   }
   else url += "&updatedMin=" + last_sync_dateTime;


   //if no endTimeMinimum is specified, the current time will be used.
   if (endTimeMinimum ==  null || endTimeMinimum == ""){
     endTimeMinimum = date_rfc339("Today");
   }

   url += "&timeMin=" + endTimeMinimum;

   Logger.log("Request URL:" + url);

   var largeString = "";
   var events = new Array();
   var nextPage = "";
   var jsonObj

   while(true){
     var response = UrlFetchApp.fetch(url + nextPage,oauth_options);
     largeString = response.getContentText();

     if ((largeString != null) && (largeString != "")) {
       jsonObj = JSON.parse(largeString);  
     }
     if ('items' in jsonObj) events = events.concat(jsonObj.items);
     if ('nextPageToken' in jsonObj){
       nextPage = "&pageToken=" + jsonObj.nextPageToken;
       continue;
     }
     break;
   }

   if (events.length == 0)return null;
     return events;
 }

2 个答案:

答案 0 :(得分:3)

好的,所以我能够通过删除在main函数中try catch块内部调用的函数内的try catch块来解决问题。从调试器运行程序时,我不再看到“序列化延续时出现意外异常”。

我希望我能更好地回答导致此错误的原因以及如何纠正错误。

答案 1 :(得分:0)

根据我的经验,这不是由该行(或任何其他)特别引起的错误,而是因为在循环内触发了错误。我没有确定可复制的原因,但GAS似乎失去了循环指针的某些错误。

我可以建议的最好的是,你怀疑在while循环中导致错误的任何行都会使用try-catch将错误记录到记录器并继续。然后循环指针不会丢失,并将按预期进行调试。