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 语句失败的地方是:
类型错误:无法读取未定义的 1dmDV2qdnU2Qqrg6mr-sxD8JaQncTUNqn [] 的属性“长度”
我不认为每次文件夹没有文件或每次没有文件夹时都会发生这种情况。
那么为什么结果有时是未定义的,当它明确定义为result = []时,如果它是未定义的,为什么它不被“if result == undefined”行捕获?
为了清楚起见,删除了一些行(只是文件计数的东西),无论如何我都没有在那个部分使用结果。
解决方案
在您的脚本中,result
声明为var result = [];
. 并result
与 比较[]
。
在 Javascript 中,在这种情况下,将对象作为参考进行比较。以此,result == []
永远是false
。为了确认哪个result
是[]
空的,下面的修改如何?
从:
result == []
至:
result.length == 0
或者
!result.length
参考:
- 数组长度
- 如何比较 JavaScript 中的数组?
- 我认为这个线程也可能有助于理解这种情况。
推荐阅读
- linux - 在 debian 上找不到 Libstdc++.so.6 版本 GLIBCXX 3.4.18
- javascript - webpack 的“npm run build”,我收到一个错误...帮帮我
- php - Symfony 1and1 电子邮件
- sql - SQL - 获取当年每个月的最后一天 - SQLITE3
- react-native - 用 moment.js 做出原生反应
- javascript - JS - 检测 Appium 点击 Android 中的 webView
- php - CSV 上传 Voyager
- java - 如何在 Android 的菜单项上添加自定义字体?
- hyperledger - 在 Hyperledger Composer 中发布参与者身份的基于组织的限制
- amazon-web-services - AWS SAM - 模板没有任何 API 连接到 Lambda 函数