【问题标题】:Cannot retrieve the next object: iterator has reached the end error when iterating over shared Drive无法检索下一个对象:迭代共享驱动器时,迭代器已到达结束错误
【发布时间】:2020-04-15 19:57:13
【问题描述】:

文件夹共享在 Google 共享驱动器上不起作用,因此我正在尝试通过 Google Apps 脚本自动共享。

我尝试参考几个示例编写代码,但我不断收到错误并提出问题。

我收到一条错误消息:

'无法检索下一个对象:迭代器已到达末尾',我确认未设置某些文件的共享。

下面是我写的代码。我该如何解决这个问题?

function myFunction() {
  var folderid = ""
  var folder = DriveApp.getFolderById(folderid);
  var files = folder.getFiles();
  while (files.hasNext()) {
    Logger.log(files.next().getName());
    files.next().setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  }
}

【问题讨论】:

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


    【解决方案1】:

    问题:

    .next()folder 中返回next 文件。如果 folder 有 1 个文件,files.hasNext() 返回 true,files.next() 返回 file1。再次调用files.next() 会返回

    无法检索下一个对象:迭代器已到达末尾'

    • 第一次调用迭代器:file#1

      Logger.log(files.next().getName());

    • 第二次调用迭代器:下一个文件(不可用)

      files.next().setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);

    如果文件夹有 5 个文件,Logger 将记录文件 1,3 和 5 的名称。共享将设置在文件 2 和 4 上。

    解决方案:

    在与files.hasNext() 核对后仅致电files.next() 一次

    片段:

      while (files.hasNext()) {
        const nextFile = files.next();//one call
        Logger.log(nextFile.getName());
        nextFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
      }
    

    参考资料:

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2021-10-24
      • 2021-08-29
      • 1970-01-01
      • 2017-03-29
      • 2020-01-19
      • 2022-06-13
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多