【发布时间】:2013-06-09 07:02:33
【问题描述】:
我在 GAS 上遇到了一个关于 Google 电子表格脚本的奇怪问题。
有时,由下面的“mouse up”事件触发的函数会执行两到三次,每次运行之间相差几秒。并非每次都会发生,问题看起来非常随机。
按钮:
var button = app.createButton("Alocar").addClickHandler(app.createClientHandler().forEventSource().setEnabled(false)).addMouseUpHandler(app.createServerHandler("onAllocateTask").addCallbackElement(panel));
“onAllocateTask”开头:
function onAllocateTaskSheet(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.toast("Aguarde alguns minutos.", "Atenção", 8);
var task = e.parameter[TASK_ALLOCATION_PARAMETER];
if (task == null || task == "") {
return;
}
... continues ...
}
我可以保证函数“onAllocateTaskSheet”在代码中仅被调用一次(在上面的一段代码中)。另一个重要信息是此过程 (onAllocateTaskSheet) 的执行时间很长(它会复制数十个 Google Docs 文档)。
是否有重复执行此功能的解释?也许我使用了错误的事件?某些内部错误会导致程序重新执行?
再次感谢您的帮助!
编辑:
好的,现在我可以确认问题与按钮或事件 mouseUp 无关。问题是函数“onAllocateTask”在 X 分钟后被重新执行。当 onAllocateTask 快速完成时(例如不到 1 分钟),它不会发生。我猜这与一些超时或内部错误有关。
Unexpected exception upon serializing continuation Google Apps Script 在这里,有人说 Google Apps 脚本丢失了“循环指针”。有可能吗?
【问题讨论】:
-
正如我在回答中所说,我没有明确的解释,但我也注意到,当函数执行时间过长时会发生这种重新执行......锁定“技巧”解决了这个问题完全适合我。你试过了吗?
-
@Sergeinsas 我昨天试过了,问题解决了。谢谢。
-
很高兴 :-) 我在每次漫长而缓慢的操作中都使用它,并且每次都能解决问题。