在我的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中也提供了函数声明。
答案 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()