Таким образом, эта функция получает папку, получает подпапки, помещает некоторую информацию в массив и затем вставляет массив в мою электронную таблицу.
Сбой в странной точке примерно в 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 = [], и если равно undefined, почему оно не фиксируется строкой "if result == undefined"?
Некоторые строки удалены для ясности (просто подсчет файлов) я все равно не использовал результат в этой части.