Richtige Verwendung von DriveApp.continueFileIterator (continuationToken)
Ich habe ein Skript geschrieben, um eine große Anzahl von Dateien in einem Google Drive-Ordner zu durchlaufen. Aufgrund der Verarbeitung, die ich an diesen Dateien vornehme, ist die maximale Ausführungszeit überschritten. Natürlich habe ich in das Skript geschrieben, um DriveApp.continueFileIterator (continuationToken) zu verwenden: Das Token wird in den Projekteigenschaften gespeichert. Wenn das Skript ausgeführt wird, wird geprüft, ob ein Token vorhanden ist, und wenn nicht, wird der FileIterator aus dem Token erstellt fängt von vorne an.
Was ich gefunden habe, ist, dass das Skript, obwohl es mit dem Fortsetzungs-Token neu gestartet wird, immer noch am Anfang der Iteration beginnt und versucht, dieselben Dateien erneut zu verarbeiten, was Zeit für die nachfolgenden Ausführungen verschwendet. Habe ich etwas Wichtiges wie einen Befehl oder eine Methode verpasst, damit es dort beginnt, wo es aufgehört hat? Soll ich das Fortsetzungstoken während der gesamten while-Schleife (contents.hasNext ()) in verschiedenen Phasen aktualisieren?
Hier ist der Beispielcode, um Ihnen eine Idee zu geben:
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);
};