Estoy tratando de crear una diapositiva en Google App Script y luego agregar un cuadro de texto a esta diapositiva recién creada. La primera llamada es a la API de Slides y la segunda llamada se realiza utilizando métodos incorporados. Sin embargo, debido a la naturaleza asíncrona de estas dos líneas, la 2 está operando antes que la 1 y provoca un error obvio.
Slides.Presentations.batchUpdate({'requests': requests}, presentationId); var shape = presentation.getSlideById(newpageId).insertShape(SlidesApp.ShapeType.TEXT_BOX, 0, 0, width, height/4);Mi pregunta sería: ¿Cómo crear una devolución de llamada o usar una promesa para hacer los ajustes necesarios?
Probé un enfoque diferente, agrupé todas las solicitudes en orden cronológico y funcionó:
var requests = [{ 'createSlide': { 'objectId': newpageId, 'insertionIndex': current_index, 'slideLayoutReference': { 'predefinedLayout': 'BLANK' } } }, { "createShape": { "objectId": `silaComment${questionNumber}${token}`, "elementProperties": { "pageObjectId": newpageId, "size": { "width": { "magnitude": 3000000, "unit": "EMU" }, "height": { "magnitude": 3000000, "unit": "EMU" } }, "transform": { "scaleX": 0.6807, "scaleY": 0.4585, "translateX": 6583050, "translateY": 1673950, "unit": "EMU" } }, "shapeType": "WAVE" } }, { "insertText": { "objectId": `silaComment${questionNumber}${token}`, "text": comment + '\nasked by ' + name, "insertionIndex": 0 } }]; Slides.Presentations.batchUpdate({'requests': requests}, presentationId);Simplemente podría esperar:
Utilities.sleep();Pero esto requiere estimar el tiempo de ejecución de la llamada a la API.
El script de aplicaciones actualmente no admite promesas. Incluso si lo hiciera, la llamada de actualización por lotes a la API no devuelve una promesa.