Google Apps脚本成功处理程序在功能完全执行之前运行

时间:2015-08-30 15:52:05

标签: javascript html google-apps-script

我有一个对话框,我通过Google Apps脚本中的html服务进行显示。在对话框中,我调用了一个google脚本函数(openFormSidebar),该函数打开一个带有成功处理程序的侧栏以关闭对话框。

对话框中的HTML

<button
onclick="google.script.run.withSuccessHandler(google.script.host.close()).openFormSidebar()">
Create Form</button>

问题是在打开侧边栏之前对话框正在关闭(成功处理程序正在运行)。

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

即使我将openFormSidebar函数设为简单的记录器语句(即Logger.log('test')),它也不会执行(没有记录任何内容)。

我错过了什么?为什么会这样?

2 个答案:

答案 0 :(得分:1)

google.script.run.withSuccessHandler(google.script.host.close()).openFormSidebar() 调用 google.script.host.close(),然后将其返回值传递到google.script.run.withSuccessHandler,与foo(bar()); 调用的方式完全相同 bar然后将其返回值传递给foo

您希望传递一个函数引用:

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

或可能

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

Function#bind返回一个函数,该函数在调用时调用具有给定this值的原始函数。因此,google.script.host.close.bind(google.script.host)会创建一个函数,在调用时,会调用google.script.host.close并将this设置为google.script.host

答案 1 :(得分:1)

实际上只是在关闭后删除()应该按照预期的方式工作。