为什么有时未定义此变量?

时间:2019-10-30 20:57:03

标签: google-apps-script

因此,此函数获取一个文件夹,获取子文件夹,将一些信息推送到数组,然后将该数组粘贴到我的电子表格中。

它在大约2%至5%的时间怪异地失败了,而我为更早发现错误而进行的尝试都行不通。为什么/如何!

function getFileCount(gdrive,level,fullpath){
  var folder = DriveApp.getFolderById(gdrive);
  var fileCount = 0;


  //append the subfolders to the sheet 
  var folders = folder.getFolders();
  var result = [];
  while (folders.hasNext()){
    var folder = folders.next();
    var path = fullpath + " > " +folder.getName();
    result.push([(level+1),folder.getId(), path,"?"]);
  }
  if (result == []) return fileCount;
  if (result == undefined) {console.log("Why the hell is it undefined?"+folder.getName()); return fileCount;}
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getSheetByName("FoldersPlusCounts");
  var end = ss.getLastRow()+1;  
  try{ss.getRange(end, 1,result.length, result[0].length).setValues(result);}catch(e){console.log(e+" "+gdrive+" ["+result+"]");return -1;}
  if (result.length > 0) SpreadsheetApp.flush();

  return fileCount;
}

try catch语句失败的地方是:

  

TypeError:无法读取未定义的属性“ length”   1dmDV2qdnU2Qqrg6mr-sxD8JaQncTUNqn []

我不认为每次文件夹没有文件或每次没有文件夹时都不会发生这种情况。

因此,当结果明确地定义为result = []时,结果如何有时是不确定的,如果未定义,为什么它不被“ if result == undefined”捕获“行?

为了清楚起见,删除了一些行(只是文件计数),反正我也没有在那部分用完结果。

2 个答案:

答案 0 :(得分:3)

在您的脚本中,result被声明为var result = [];。然后将result[]进行比较。

在这种情况下,使用Javascript将对象作为参考进行比较。这样,result == []始终是false。为了确认result是否为[]为空,接下来的修改如何?

发件人:

result == []

收件人:

result.length == 0

!result.length

参考文献:

答案 1 :(得分:0)

这对我有用:

function getFolderCount(){
  var fldr=DriveApp.getFolderById('folderId');
  var subfldrCount=0;
  var subfolders=fldr.getFolders();
  var result=[];
  while (subfolders.hasNext()){
    var subfolder=subfolders.next();
    result.push([++subfldrCount,subfolder.getName(),subfolder.getId()]);
  }
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("FoldersPlusCounts");
  sh.getRange(sh.getLastRow()+1, 1,result.length, result[0].length).setValues(result);
}