关闭侧边栏然后处理表单提交

时间:2018-03-14 01:16:35

标签: javascript google-apps-script google-sheets

在我的Google电子表格中,用户可以点击自定义菜单项,在侧边栏中显示HTML表单,以便他们输入数据。处理表单数据的函数需要大约25秒才能完成。 是否可以关闭侧边栏然后处理表单数据?在脚本完成时,用户将屏幕的一部分屏蔽了半分钟很烦人。

目前我正在从<form onSubmit="handleFormSubmit(this)">调用此函数,正如预期的那样,只有在脚本完成后才会关闭侧边栏:

function handleFormSubmit(formObject) {
  google.script.run.withSuccessHandler(google.script.close).processForm(formObject)
  }

修改 我尝试了@ Jack_Brown的添加睡眠延迟的策略,不幸的是&#34; setTimeout&#34;在Apps脚本中不可用。另外,我不认为&#34; async&#34; Apps Script中也提供了函数声明。 enter image description here

1 个答案:

答案 0 :(得分:2)

您可以在致电google.script.run.processForm(formObject)以关闭侧边栏后立即致电google.script.host.close()。如上所述here

  

google.script.run是异步客户端JavaScript API

其中,意味着客户端上的javascript不会等待执行结束,然后再继续执行代码中的下一行。因此,您可以在运行API之后立即调用google.script.host.close()。像这样

function handleFormSubmit(formObject) {
  google.script.run.processForm(formObject)
  google.script.host.close()
  }

由于您过早地关闭了客户端,因此您不需要successHandler。
注意:但是,如果运行失败,您将不会收到任何通知!

编辑:在调用运行后立即调用google.script.host.close()似乎会影响异步调用。但是,添加延迟允许它在关闭侧边栏之前完成API调用。在关闭侧边栏之前,以下功能会休眠2秒钟。

function handleFormSubmit(formObject) {
    google.script.run.processForm(formObject)
    setTimeout(google.script.host.close, 2000)
  }

参考:
setTimeout()