我寫了一個腳本,可以通過在谷歌雲端硬盤文件夾有大量的文件進行迭代。由於我對這些文件所做的處理超出了最大執行時間。當然,我寫入腳本使用DriveApp.continueFileIterator(continuationToken):令牌存儲在項目屬性中,當腳本運行時,它會檢查是否有令牌,如果存在則從令牌創建FileIterator,如果不是則重新開始。正確使用
我發現了什麼是即使腳本與它仍然具有迭代的開頭開始延續標記重新啓動,再次嘗試處理相同的文件,這是浪費時間的後續執行。我是否錯過了一些至關重要的命令或方法,使它從離開的地方開始?我是否應該在while(content.hasNext())循環中的各個階段更新延續令牌?
這裏的瘦身,給你一個想法的示例代碼:
function listFilesInFolder() {
var id= '0fOlDeRiDg';
var scriptProperties = PropertiesService.getScriptProperties();
var continuationToken = scriptProperties.getProperty('IMPORT_ALL_FILES_CONTINUATION_TOKEN');
var lastExecution = scriptProperties.getProperty('LAST_EXECUTION');
if (continuationToken == null) {
// first time execution, get all files from drive folder
var folder = DriveApp.getFolderById(id);
var contents = folder.getFiles();
// get the token and store it in a project property
var continuationToken = contents.getContinuationToken();
scriptProperties.setProperty('IMPORT_ALL_FILES_CONTINUATION_TOKEN', continuationToken);
} else {
// we continue to import from where we left
var contents = DriveApp.continueFileIterator(continuationToken);
}
var file;
var fileID;
var name;
var dateCreated;
while(contents.hasNext()) {
file = contents.next();
fileID = file.getId();
name = file.getName();
dateCreated = file.getDateCreated();
if(dateCreated > lastExecution) {
processFiles(fileID);
}
}
// Finished processing files so delete continuation token
scriptProperties.deleteProperty('IMPORT_ALL_FILES_CONTINUATION_TOKEN');
var currentExecution = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd HH:mm:ss");
scriptProperties.setProperty('LAST_EXECUTION',currentExecution);
};
第一次執行或完成時是否超時? – Jonathon