在 Google 应用程序脚本中,用什么替换 Utilities.sleep() 以防止双击?
Within Google apps script, what replaces Utilities.sleep() to prevent double clicks?
我正在 Google Docs 脚本中编写一个附加组件。从侧边栏,它将信息写入文档,而不是电子表格。根据连接速度,文档会在 <1 秒到 5 秒之间更新信息。
我的问题与用户双击有关。我可以禁用按钮;然而,该脚本只需不到一秒的时间即可完成,但文档会在 > 1 秒内更新。完成的脚本启用按钮。用户再次点击按钮,脚本第一次尝试写入信息。最终结果是双录。
我的解决思路是:1. 等待或暂停 2. 回调函数或 3. 锁。
问题:
回调:我不知道我现在可以用什么 event/input 来告诉脚本解锁按钮。我可以做一个无限循环,不断检查直到文档更新,但这似乎不是一个可靠的解决方案。
Lock:没有什么可以简单地等待。它可以等待函数可用,但这不是问题。问题是脚本相对于 Doc 更新完成得很快。
有什么想法吗?
谢谢。
我想到了这个解决方案:
每次调用脚本时,您都会将文档的当前文本与上次调用时传递给脚本的文本进行比较。
一些伪代码:
var previousText = "";
function addEntry() {
var body = DocumentApp.getActiveDocument().getBody();
var currentText = body.getText();
if (currentText === previousText) {
// Enable button here
return;
}
// Add entry to document AND currentText
// ...
// ...
previousText = currentText; // Save the text for future checks
// Enable button here
}
function onButtonClick(e) {
addEntry();
// Disable button here
}
我明白了。我没有意识到 .withSuccessHandler 也在等待文档更新。我假设它只等待 .saveSettings(settings) 完成。现在 SuccessHandler(enablesButton) 在适当的时候防止双击。
google.script.run.withFailureHandler(onFailure).withSuccessHandler(enableButton)
.saveSettings(settings);
我正在 Google Docs 脚本中编写一个附加组件。从侧边栏,它将信息写入文档,而不是电子表格。根据连接速度,文档会在 <1 秒到 5 秒之间更新信息。
我的问题与用户双击有关。我可以禁用按钮;然而,该脚本只需不到一秒的时间即可完成,但文档会在 > 1 秒内更新。完成的脚本启用按钮。用户再次点击按钮,脚本第一次尝试写入信息。最终结果是双录。
我的解决思路是:1. 等待或暂停 2. 回调函数或 3. 锁。
问题: 回调:我不知道我现在可以用什么 event/input 来告诉脚本解锁按钮。我可以做一个无限循环,不断检查直到文档更新,但这似乎不是一个可靠的解决方案。 Lock:没有什么可以简单地等待。它可以等待函数可用,但这不是问题。问题是脚本相对于 Doc 更新完成得很快。
有什么想法吗?
谢谢。
我想到了这个解决方案:
每次调用脚本时,您都会将文档的当前文本与上次调用时传递给脚本的文本进行比较。
一些伪代码:
var previousText = "";
function addEntry() {
var body = DocumentApp.getActiveDocument().getBody();
var currentText = body.getText();
if (currentText === previousText) {
// Enable button here
return;
}
// Add entry to document AND currentText
// ...
// ...
previousText = currentText; // Save the text for future checks
// Enable button here
}
function onButtonClick(e) {
addEntry();
// Disable button here
}
我明白了。我没有意识到 .withSuccessHandler 也在等待文档更新。我假设它只等待 .saveSettings(settings) 完成。现在 SuccessHandler(enablesButton) 在适当的时候防止双击。
google.script.run.withFailureHandler(onFailure).withSuccessHandler(enableButton)
.saveSettings(settings);