Google Apps Script: Cómo usar ContinuationToken con el iterador de carpeta recursivo

Debido a las cuotas de API de Drive,Cuotas de servicios y límite de tiempo de ejecución del script6 min a menudo es crítico dividir las manipulaciones de archivos de Google Drive en fragmentos.

Nosotros podemos usarPropiedades de servicio AlmacenarcontinuationToken paraFolderIterator oFileIterator. De esta forma podemos detener nuestro script y en la próxima ejecución continuar desde el lugar donde nos detenemos.

Ejemplo de trabajo (iterador lineal)
  // 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');
  }
Problema (iterador recursivo)

Para recuperar la estructura de carpeta en forma de árbol y obtener sus archivos, tenemos que usar la función recursiva. Algo así:

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);
  }
}

Sin embargo, en este caso no tengo idea de cómo usarcontinuationToken.

Pregunta

Cómo utilizarContinuationToken&nbsp;con el iterador recursivo de carpetas, cuando necesitamos lanzar toda la estructura de carpetas?

Suposición

¿Tiene sentido construir muchos tokens con nombre basado en elid&nbsp;de cadaparent&nbsp;¿carpeta?