2015-02-03 3 views
0

Я создал функцию, которая сохраняется в электронной таблице ответов формы Google. Когда форма отправляется, она берет каждую точку данных и заполняет их в документ слова google, сохраненный на диске, затем создает PDF-документ и отправляет его в электронное письмо тому, кто отправил форму.Как повторить попытку DriveApp.getFileById, если ошибка произошла, до успешного завершения

Примерно в 5% случаев происходит ошибка во время фазы кода, вызываемой функцией DriveApp.getFileById (docTemplate). Ошибка всегда повторяется. «Мы сожалеем, произошла ошибка сервера. Подождите немного и повторите попытку (строка 186, файл« Код »)«

Я пришел к выводу, что это проблема с сетью, и поскольку у пользователя плохое соединение с Интернетом, он не может открыть файл docTemplate, следовательно, это ошибки.

Я хотел бы создать своего рода цикл, который пытается выполнить функцию несколько раз, пока она не завершит эту функцию успешно. Когда происходит ошибка, становится огромной болью в административном порядке, чтобы гарантировать, что пользователь получит свой документ в своевременной усадьбе!

Код У меня довольно длинный. Она начинается с установки переменной, а затем с помощью нескольких, если это дополнительно определить некоторые переменные, а затем переходит непосредственно к:

var copyId = DriveApp.getFileById(docTemplate) //line 186 
 
.makeCopy(docName+' for '+ name)    //line 187 
 
.getId();          //line 188

После этого он затем сохраняет и закрывает документ, преобразует временный документ в PDF, затем отправляет электронное письмо с прикрепленными файлами.

Опять же, программа работает безупречно в 95% случаев без проблем. Кажется, что возможно подключение к Интернету может быть проблемой.

ответ

0

Возможно, вы можете обернуть эту часть в блок try-catch, а затем вызвать ее в цикле до тех пор, пока не будет создана копия. И внутри основной функции вы можете вызвать copyTemplate(), пока возвращаемое значение не будет равно null.

function copyTemplate(docTemplate, docName, name) { 
try { 
    var copyId = DriveApp.getFileById(docTemplate) //line 186 
        .makeCopy(docName+' for '+ name)    //line 187 
        .getId(); 
    return copyId; 
} catch (e) {return null;} 
} 
+0

Хорошо, я внедрил этот код и до сих пор никаких проблем! Я буду отмечать это и крутить назад, если что-нибудь придет. Блок Try-catch сделал трюк. Грасиас Амит. Один быстрый вопрос: что такое «return copyId»? часть делать? –

Смежные вопросы