在Google应用程序脚本中,什么取代了Utilities.sleep()以防止双击?

时间:2015-07-14 00:25:41

标签: javascript google-apps-script wait

我在Google文档脚本中编写了一个附加组件。从侧边栏,它将信息写入文档,而不是电子表格。根据连接速度,Doc在信息的<1秒到5秒之间更新。

我的问题是用户双击。我可以禁用按钮;但是,脚本需要不到一秒钟的时间才能完成,但Doc会在&gt;中更新。 1秒。完成的脚本启用按钮。用户再次单击该按钮,脚本将首次尝试写入信息。最终结果是双重进入。

我的解决方案思路是:1。等待或暂停2.回调功能或3.锁定。

问题: 回调:我无法弄清楚我现在可以用什么事件/输入告诉脚本解锁按钮。我可以做一个永远不断检查的无限循环,直到Doc更新,但这似乎不是一个可靠的解决方案。 锁:没有任何东西只是等待。它可以等待功能可用,但这不是问题。问题是脚本是相对于Doc更新快速完成的。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

我想到了这个解决方案:

每次调用脚本时,都会将文档的当前文本与上次调用时传递给脚本的文本进行比较。

一些伪代码:

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
}

答案 1 :(得分:0)

我明白了。我没有意识到.withSuccessHandler也等待Doc更新。我假设它只等待.saveSettings(设置)完成。现在SuccessHandler(enableButton)在适当的时候防止双击。

        google.script.run.withFailureHandler(onFailure).withSuccessHandler(enableButton)
               .saveSettings(settings);