Конечно, есть место для улучшений (например, он просто проверяет имя папки, чтобы увидеть, является ли оно резюме против перезапуска), но этого, скорее всего, будет достаточно для 95% людей, которым необходимо рекурсивно выполнять итерацию в папке с токенами продолжения.

квот Drive API,Квоты на услуги и ограничение времени выполнения скрипта6 min часто очень важно разделять манипуляции с файлами на Google Диске на куски.

Мы можем использоватьPropertiesService хранитьcontinuationToken заFolderIterator или жеFileIterator, Таким образом, мы можем остановить наш сценарий и при следующем запуске продолжить с того места, где остановились.

Рабочий пример (линейный итератор)
  // Logs the name of every file in the User's Drive
  // this is useful as the script may take more that 5 minutes (max execution time)
  var userProperties = PropertiesService.getUserProperties();
  var continuationToken = userProperties.getProperty('CONTINUATION_TOKEN');
  var start = new Date();
  var end = new Date();
  var maxTime = 1000*60*4.5; // Max safe time, 4.5 mins

  if (continuationToken == null) {
    // firt time execution, get all files from Drive
    var files = DriveApp.getFiles();
  } else {
    // not the first time, pick up where we left off
    var files = DriveApp.continueFileIterator(continuationToken);
  }
  while (files.hasNext() && end.getTime() - start.getTime() <= maxTime) {
    var file = files.next();
    Logger.log(file.getName());
    end = new Date();
  }

  // Save your place by setting the token in your user properties
  if(files.hasNext()){
    var continuationToken = files.getContinuationToken();
    userProperties.setProperty('CONTINUATION_TOKEN', continuationToken);
  } else {
    // Delete the token
    PropertiesService.getUserProperties().deleteProperty('CONTINUATION_TOKEN');
  }
Задача (рекурсивный итератор)

Для получения древовидной структуры папки и получения ее файлов мы должны использовать рекурсивную функцию. Как-то так:

doFolders(DriveApp.getFolderById('root folder id'));
// recursive iteration
function doFolders(parentFolder) {
  var childFolders = parentFolder.getFolders();
  while(childFolders.hasNext()) {
    var child = childFolders.next();
    // do something with folder
    // go subfolders
    doFolders(child);
  }
}

Тем не менее, в этом случае я понятия не имею, как использоватьcontinuationToken.

Вопрос

Как пользоватьсяContinuationToken с рекурсивным итератором папок, когда нам нужно бросить всю структуру папок?

предположение

Имеет ли смысл создавать множество токенов с именем на основеid каждогоparent папка?

Ответы на вопрос(1)

Ваш ответ на вопрос