如何重试DriveApp.getFileById,如果出错,直到成功
How to retry DriveApp.getFileById, if error occurs, until successful
我创建了一个保存在 google 表单回复电子表格中的函数。提交表单时,它获取每个数据点并将它们填充到保存在驱动器上的 google word 文档中,然后创建文档的 PDF 并将其通过电子邮件发送给提交表单的个人。
大约 5% 的时间,错误发生在函数调用 DriveApp.getFileById(docTemplate) 的代码阶段。错误始终相同 "We're sorry, a server error occurred. Please wait a bit and try again. (line 186, file "Code")"
我开始认为这是一个网络问题,由于用户的互联网连接不佳,因此无法打开 docTemplate 文件,因此出现错误。
我想创建某种循环,多次尝试该函数,直到成功完成该函数。当错误发生时,确保用户及时获得他们的文档在管理上会变得非常痛苦!
我的代码比较长。它从设置变量开始,然后使用一些if进一步定义一些变量,然后直接进入:
var copyId = DriveApp.getFileById(docTemplate) //line 186
.makeCopy(docName+' for '+ name) //line 187
.getId(); //line 188
然后保存并关闭文档,将临时文档转换为 PDF,然后发送带有附件的电子邮件。
同样,该程序在 95% 的时间内运行完美,没有任何问题。看来可能是互联网连接问题。
也许你可以将这部分包裹在一个try-catch块中,然后在循环中调用它,直到复制完成。而在main函数内部,可以调用copyTemplate(),直到return值不为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;}
}
我创建了一个保存在 google 表单回复电子表格中的函数。提交表单时,它获取每个数据点并将它们填充到保存在驱动器上的 google word 文档中,然后创建文档的 PDF 并将其通过电子邮件发送给提交表单的个人。
大约 5% 的时间,错误发生在函数调用 DriveApp.getFileById(docTemplate) 的代码阶段。错误始终相同 "We're sorry, a server error occurred. Please wait a bit and try again. (line 186, file "Code")"
我开始认为这是一个网络问题,由于用户的互联网连接不佳,因此无法打开 docTemplate 文件,因此出现错误。
我想创建某种循环,多次尝试该函数,直到成功完成该函数。当错误发生时,确保用户及时获得他们的文档在管理上会变得非常痛苦!
我的代码比较长。它从设置变量开始,然后使用一些if进一步定义一些变量,然后直接进入:
var copyId = DriveApp.getFileById(docTemplate) //line 186
.makeCopy(docName+' for '+ name) //line 187
.getId(); //line 188
然后保存并关闭文档,将临时文档转换为 PDF,然后发送带有附件的电子邮件。
同样,该程序在 95% 的时间内运行完美,没有任何问题。看来可能是互联网连接问题。
也许你可以将这部分包裹在一个try-catch块中,然后在循环中调用它,直到复制完成。而在main函数内部,可以调用copyTemplate(),直到return值不为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;}
}