google-apps-script - 谷歌脚本 DriveApp.getFolders().hasNext() 错误
问题描述
如果它不存在,我想在驱动器中创建一个目录。
function CreateDirectory() {
var folderName="Example";
var Directory;
var fi = DriveApp.getFoldersByName(folderName);
if (fi.hasNext()) {
Directory = fi.next();
} else {
Directory = DriveApp.createFolder(folderName);
}
}
达到条件时函数停止:
抱歉,发生了服务器错误。请稍等,然后重试。
有什么问题,如何解决?
解决方案
您的代码没有任何问题。
Google 无法保证 100% 的服务可用性。
解释:
该错误告诉您在再次执行该功能之前需要稍等片刻。
一个潜在的解决方法是使用 try...catch语句,并在括号内包含一段代码,以便在一段时间后catch
自动执行该函数。
例如, 如果函数第一次失败,您可以创建一个时间驱动的 触发器CreateDirectory()
,该触发器在一段时间(例如 1 分钟)后执行。
解决方案:
在以下解决方案中,逻辑是手动执行该toRun()
功能。后者将尝试执行CreateDirectory()
。如果发生错误,它将创建一个时间驱动的触发器,该触发器将CreateDirectory()
在一分钟后执行(根据您的需要进行修改)。该clearTrigger()
函数负责清除由于该代码而创建的所有先前的触发器(如果有的话)。
function toRun(){
try{
CreateDirectory();
}
catch (e){
clearTrigger(); // clear previous created triggers
ScriptApp.newTrigger("CreateDirectory")
.timeBased()
.after(1 * 60 * 1000) // execute CreateDirectory after 1 minute
.create();
}
}
function CreateDirectory() {
var folderName="Example";
var Directory;
var fi = DriveApp.getFoldersByName(folderName);
if (fi.hasNext()) {
Directory = fi.next();
} else {
Directory = DriveApp.createFolder(folderName);
}
}
function clearTrigger(){
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "CreateDirectory") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
推荐阅读
- php - WordPress。自定义搜索表单查询仅从自定义 post_type 不起作用
- iis - HTTP 错误 401.2 - 未经授权,错误代码为 0x80070005,同时使用 IIS 和 IIS Express
- highcharts - Highcharts 8.2.0 版 tilemap 不支持“方形”形状
- angular - 仅替换 Angular 中 Title 元素的一部分
- python - ModuleNotFoundException youtube-dl 模块无法识别
- javascript - 从数据表中导出 excel 文件时数据之间的空间
- bpf - 密件抄送:ImportError 无法导入名称 BPF
- security - Page_load 方法可能会泄漏服务器端条件值,从而使用户可以从另一个网站进行跟踪
- symfony - 实体类与其他各种实体类的关系
- javascript - 如何用字符串值而不是数据制作图表?