2

最近、デバッグしようとすると、スプレッドシートのGoogleAppsScriptで「継続のシリアル化時に予期しない例外」というエラーが発生し始めました。Google CloudSQL APIへの接続を作成した後、エラーが発生したようです。このエラーは、jdbcオブジェクトコンストラクターをコメントアウトした後でも発生します。他の人がこの問題を抱えており、問題を解決するためにGoogleTechが必要だったようです。

私はすべての掲示板でこの問題の解決策を探しましたが、運がありませんでした。私のために内部を見ることができる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;
 }
4

2 に答える 2

3

メイン関数の try catch ブロック内から呼び出された関数内の try catch ブロックを削除することで、問題を解決できました。デバッガーからプログラムを実行しているときに、「継続のシリアライズ時に予期しない例外」が表示されなくなりました。

このエラーの原因とその修正方法について、より確かな答えがあればいいのにと思います。

于 2013-02-25T14:26:31.790 に答える
0

私の経験では、これは特にその行(またはその他)によって引き起こされたエラーではなく、ループ内でエラーがトリガーされたためです。正確な複製可能な原因を特定していませんが、GASはループポインターの特定のエラーを失っているようです。

私が提案できる最善の方法は、whileループ内でエラーを引き起こしていると思われる行はすべて、エラーをロガーに記録して続行するtry-catchでラップすることです。その後、ループポインタは失われず、期待どおりにデバッグされます。

于 2013-02-19T11:16:40.107 に答える