如何在不达到执行限制的情况下返回所有文件夹名称和ID?

时间:2014-07-09 03:55:58

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

我正在尝试使用Google Apps脚本检索所有文件夹及其各自ID的列表。目前,我将结果写入一个数组,然后每5000个记录发布到一个电子表格中。不幸的是,脚本在完成之前达到了执行限制(5分钟)。我该如何解决这个问题?而且,通过HTTP进行RESTful API调用比使用Apps脚本更成功吗?

我注意到以下内容:

  1. 代码已经遵循Google的批量写入最佳做法。
  2. 执行速度缓慢是因为Apps脚本缓慢索引驱动器。
  3. 结果似乎遵循一致的索引模式。
    • 多次运行以相同的顺序生成结果
    • 未知如何在添加时重新编制项目的索引,以防止在运行之间进行有意义的缓存
    • 除非确定索引方法,否则Delta不可靠
  4. 查看云端硬盘缓存。
    • 仍然需要遍历FolderIterator对象
    • 理论上的表现会更差(正确吗?)
  5. 代码如下:

    function LogAllFolders() {
      var ss_index = 1;
      var idx = 0;
      var folder;
      var data = new Array(5000);
      for (i=0;i<5000;i++){
        data[i] = new Array(2);
      }
      var ss = SpreadsheetApp.create("FolderInv2",1,2).getSheets()[0];
      var root = DriveApp.getFolders();
      while(root.hasNext()) {
        folder = root.next();
        data[idx][0] = folder.getName();
        data[idx][1] = folder.getId();
        idx++;
        if ((ss_index % 5000) == 0) {
          ss.insertRowsAfter(ss.getLastRow()+1, 5000);
          ss.getRange(ss.getLastRow()+1,1,5000,2).setValues(data);
          SpreadsheetApp.flush();
          idx = 0;
        }
        ss_index++;
      }
    }
    

1 个答案:

答案 0 :(得分:0)

我首先收集您想要首先处理的所有文件夹ID,然后您可以将已处理的文件夹ID(或可能是数组索引)保存到项目属性中,然后每隔五分钟将作业作为CRON运行然后从您之前保存的文件夹ID或索引中恢复。

我想当它完成后,以编程方式删除CRON触发器。