错误:无法检索下一个对象:迭代器已到达末尾。 createFolder@函数:createFolder.gs:8

Posted

技术标签:

【中文标题】错误:无法检索下一个对象:迭代器已到达末尾。 createFolder@函数:createFolder.gs:8【英文标题】:Error: Cannot Retrieve the next object: iterator has reached the end. createFolder @ Function: createFolder.gs:8 【发布时间】:2020-11-27 16:18:01 【问题描述】:

我使用我在 SO 上看到的代码将文档保存到 Google Drive 中的特定文件夹中,但按日期 (YYYY-MM-DD)。我已经运行了这个脚本,但我不断收到上述消息。我试图查看代码,但看不到我哪里出错了 - 有人可以帮我吗?非常感谢!

function createFolder()
  var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd");
  var folderYearDate = Utilities.formatDate(new Date(), "GMT", "yyyy");
  var folderMonthDate = Utilities.formatDate(new Date(), "GMT", "MMMM");
  var name = "XXXX" + formattedDate; //file name
  var parent = DriveApp.getFolderById("XXXX").getFoldersByName("XXXX")
  var yearExist = parent.next();
  var yearFolders = yearExist.getFoldersByName(folderYearDate);
  if(yearFolders.hasNext())
    var yearFolder = yearFolders.next()
    Logger.log('Yes, there is a year folder')
    //return;
   else 
    var yearFolder = yearExist.createFolder(folderYearDate)

    Logger.log('There was no year folder, but it was created.')
    //return;
  

  var monthFolders = yearFolder.getFoldersByName(folderMonthDate);
  if(monthFolders.hasNext())
    var monthFolder = monthFolders.next()
    Logger.log('Yes, there is a month folder.')

   else 
    var monthFolder = yearFolder.createFolder(folderMonthDate);
    Logger.log('There was no month folder, but it was created')
  

【问题讨论】:

【参考方案1】:

失败是因为DriveApp.getFolderById("XXXX").getFoldersByName("XXXX") 调用没有找到任何文件夹。您应该始终在 .next() 之前调用 .hasNext() 以查看是否有任何内容(就像您稍后在代码中所做的那样)。

var parent = DriveApp.getFolderById("XXXX").getFoldersByName("XXXX")

// Check if the folder exists
if (!parent.hasNext()) 
  Logger.log("Folder not found. Exiting...");
  return;


var yearExist = parent.next();

【讨论】:

谢谢你们。我现在已经编辑了代码。我收到一个单独的错误,我打算发布另一个问题,因为它与这个问题无关。【参考方案2】:

根据定义,

next() - 获取文件或文件夹集合中的下一项。如果没有剩余项目,则引发异常。

为避免该异常,您必须使用hasNext() 确定调用next() 是否会返回一个项目。

在您的代码中:

if(parent.hasNext())
  var yearExist = parent.next();
  //some operations

参考文献

next()

hasNext()

【讨论】:

以上是关于错误:无法检索下一个对象:迭代器已到达末尾。 createFolder@函数:createFolder.gs:8的主要内容,如果未能解决你的问题,请参考以下文章

C++中的向量迭代器

如何识别向量迭代器是不是已到达向量末尾?

iPhone:“无法识别的选择器已发送到实例”错误

无法识别的选择器已发送至实例:

单击本地通知时出现 Google FCM ios-quickstart 错误 - 无法识别的选择器已发送到实例

遍历迭代器使用