【问题标题】:Google App Script Timed Out after 30 minsGoogle App 脚本在 30 分钟后超时
【发布时间】:2018-05-04 18:28:16
【问题描述】:

我在脚本下面运行,但由于我提供的文件夹 ID 下有很多文件夹,所以它出错并显示“超时”错误消息。

谁能帮我优化它或替代方法。

function listFolderContents() {
  var currentFolder = DriveApp.getFolderById("0B89Y-hAfWt_HVkhSbWprOVhPM00");
  traverseFolder(currentFolder);
}

function traverseFolder(folder) { 
  DriveApp.getRootFolder().removeFolder(folder);
  var subFolders = folder.getFolders();
  while (subFolders.hasNext()) {
    traverseFolder(subFolders.next());
  }
}

【问题讨论】:

  • 期望的行为是什么?
  • 考虑到云端硬盘文件夹只是标签,您是否确保每个文件夹只访问一次?考虑通过对象跟踪访问过的 ID,并且只遍历对象中尚不存在的文件夹。
  • removeFolder doesn't work的可能重复

标签: google-apps-script google-drive-api


【解决方案1】:

您似乎正在对文件夹进行递归删除。尝试将 removeFolder 调用移到递归调用之后。否则,您在调用getFolders 之前删除该文件夹,这就是我认为它对您超时的原因。

像这样:

function deleteFolder(folder) { 
  var subFolders = folder.getFolders();
  while (subFolders.hasNext()) {
    deleteFolder(subFolders.next());
  }
  DriveApp.getRootFolder().removeFolder(folder);
}

递归函数的终止条件是没有子文件夹,即你在叶子文件夹中。

见this related answer to a question about recursive deletion of a binary tree

【讨论】:

    【解决方案2】:

    我认为这种情况下的解决方案可能是使用getContinuationToken() stackoverflow 上的另一个 answer 中提供了 continuationToken 的迭代示例。

    【讨论】:

      猜你喜欢
      • 2022-10-20
      • 1970-01-01
      • 2021-10-25
      • 2018-07-26
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多