El controlador de éxito de Google Apps Script se ejecuta antes de que la función se ejecute por completo

Tengo un diálogo que estoy mostrando a través del servicio html en Google Apps Script. Desde el cuadro de diálogo, llamo a una función de script de google ( openFormSidebar ) que abre una barra lateral con un controlador de éxito para cerrar el cuadro de diálogo.

HTML en el cuadro de diálogo

  

El problema es que el diálogo se está cerrando (el controlador de éxito se está ejecutando) antes de que se abra la barra lateral.

código gs

 function openFormSidebar () { var html = HtmlService.createHtmlOutputFromFile('FormSidebar') .setTitle('Form Creation') .setWidth(300) .setSandboxMode(HtmlService.SandboxMode.IFRAME); SpreadsheetApp.getUi() // Or DocumentApp or FormApp. .showSidebar(html); } 

Incluso si hago que la función openFormSidebar una simple statement del registrador (es decir, Logger.log('test') ) no se ejecuta (nada se registra).

¿Qué me estoy perdiendo? ¿Por qué está ocurriendo esto?

google.script.run.withSuccessHandler(google.script.host.close()).openFormSidebar() llama a google.script.host.close() y luego pasa su valor de retorno a google.script.run.withSuccessHandler , exactamente el camino foo(bar()); invoca la bar y luego pasa su valor de retorno a foo .

En su lugar, deseará pasar una referencia de función:

 google.script.run.withSuccessHandler(function() { google.script.host.close() }).openFormSidebar()` 

o posiblemente

 google.script.run.withSuccessHandler(google.script.host.close.bind(google.script.host)).openFormSidebar()` 

Function#bind devuelve una función que, cuando se invoca, llama al original con un valor dado. Entonces google.script.host.close.bind(google.script.host) crea una función que, cuando se google.script.host.close , llamará a google.script.host.close con this conjunto en google.script.host .

En realidad, solo eliminar el () después de cerrar debería funcionar de la manera que esperas.