Правильное использование DriveApp.continueFileIterator (continueationToken)
Я написал скрипт для перебора большого количества файлов в папке на Google Диске. Из-за обработки, которую я выполняю для этих файлов, она превышает максимальное время выполнения. Естественно, я написал в сценарий использование DriveApp.continueFileIterator (continueationToken): токен сохраняется в свойствах проекта и при запуске скрипта проверяет, есть ли токен, если он существует, он создает FileIterator из токена, если не он. начинается заново.
Я обнаружил, что, несмотря на то, что скрипт перезапускается с токеном продолжения, он все еще начинается с начала итерации, пытаясь снова обработать те же файлы, что приводит к потере времени для последующих выполнений. Я что-то упустил, как в команде или методе, чтобы начать с того места, где он остановился? Должен ли я обновлять токен продолжения на разных этапах во время цикла while (contents.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);
};