2

Недавно я начал получать сообщение об ошибке «Неожиданное исключение после сериализации продолжения» в электронной таблице Google Apps Script при попытке отладки. Ошибка, кажется, начинается после того, как я создал соединение с Google CloudSQL api. Эта ошибка сохраняется даже после комментирования конструктора объекта jdbc. Похоже, что у других была эта проблема, и для решения этой проблемы нужен Google Tech.Неожиданное исключение при сериализации продолжения Скриншот Google Apps

Я искал все доски обсуждений для решения этой проблемы без везения. Есть ли вероятность, что там есть технология Google, которая могла бы взглянуть под капотом для меня? Я бы опубликовал код, если бы мог определить, какая строка действительно вызывала ошибку.

EDIT:

Хорошо, я думаю, что я обнаружил, где встречающаяся ошибку. Кажется, что

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; 
} 
+0

Предполагаю, вы видели этот вопрос? http://stackoverflow.com/questions/10954075/unexpected-exception-upon-serializing-continuation Похоже, вам нужно активировать всплывающее окно авторизации, потому что ваш сценарий в настоящее время не разрешен. –

+0

Привет, Фил. Да, я видел эту нить. Мне удалось удалить вызов urlfetchapp.fetch из списка виновников (или, по крайней мере, я могу пройти мимо этой строки кода и получить всплывающее окно ошибки в другом месте.) – user2085215

ответ

0

В моем опыте, это не ошибка вызвана тем, что линии (или любой другой) конкретно, но из-за ошибки срабатывает в цикле. Я не привязал точную реплицируемую причину, но GAS, похоже, потерял указатель цикла на определенные ошибки.

Лучшее, что я могу предложить, это то, что любая строка, которую вы подозреваете, вызывает ошибку в обход цикла while с try-catch, который регистрирует ошибку в журнале и продолжается. Указатель цикла не теряется и будет отлаживаться, как ожидалось.

+0

Привет, Jonathon, Спасибо за отзыв. Я попытался вставить блоки захвата try во всюду, и я все еще получаю ошибку при отладке. Это делает развитие почти невозможным. Желание отладчика иметь список часов прямо сейчас. – user2085215

+0

вставка try catch с электронной почтой/протоколированием является обходным путем для этой ошибки при использовании отладчика. Это, к сожалению, не означает, что ошибка уходит, просто вы можете отлаживать другими способами. – Jonathon

3

ОК, поэтому я смог устранить проблему, удалив блок catch try внутри функции, вызванной изнутри блока catch try в основной функции. Я больше не вижу «Неожиданного исключения после сериализации продолжения» при запуске программы из отладчика.

Мне жаль, что у меня не было более твердого ответа на то, что вызывает эту ошибку и как ее исправить.