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 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 de cadaparent ¿carpeta?

Respuestas a la pregunta(1)

Su respuesta a la pregunta