Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Google apps脚本中,是什么替代了Utilities.sleep()以防止双击?_Javascript_Google Apps Script_Wait - Fatal编程技术网

Javascript 在Google apps脚本中,是什么替代了Utilities.sleep()以防止双击?

Javascript 在Google apps脚本中,是什么替代了Utilities.sleep()以防止双击?,javascript,google-apps-script,wait,Javascript,Google Apps Script,Wait,我正在谷歌文档脚本中编写一个插件。从侧边栏,它将信息写入文档,而不是电子表格。根据连接速度,文档在1秒之间更新。完成的脚本将启用该按钮。用户再次单击按钮,脚本第一次尝试写入信息。最终结果是双重输入 我的解决思路是:1。等待或暂停2。回调函数或3。锁 问题: 回调:我不知道我可以使用什么事件/输入来告诉脚本现在解锁按钮。我可以做一个无限循环,不断地检查,直到文档被更新,但这似乎不是一个可靠的解决方案。 洛克:没有什么可以简单地等待的。它可以等待函数可用,但这不是问题。问题在于,相对于文档更新,脚本

我正在谷歌文档脚本中编写一个插件。从侧边栏,它将信息写入文档,而不是电子表格。根据连接速度,文档在1秒之间更新。完成的脚本将启用该按钮。用户再次单击按钮,脚本第一次尝试写入信息。最终结果是双重输入

我的解决思路是:1。等待或暂停2。回调函数或3。锁

问题: 回调:我不知道我可以使用什么事件/输入来告诉脚本现在解锁按钮。我可以做一个无限循环,不断地检查,直到文档被更新,但这似乎不是一个可靠的解决方案。 洛克:没有什么可以简单地等待的。它可以等待函数可用,但这不是问题。问题在于,相对于文档更新,脚本执行得太快了

有什么想法吗


谢谢

我想到了这个解决方案:

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

一些伪代码:

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(设置)完成。现在,在适当的时间单击SuccessHandler(enablesButton)以防止双击

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

谢谢你的回复,维亚斯切斯拉夫。我很感激。addEntry()函数是循环还是等待currentText==前一个文本?如果是这样,我不明白,我也想知道。问题是currentText的脚本已完成;但是,该文档尚未更新。这有点像文档需要“刷新”时间来反映当前文本。这有意义吗?如果您的示例循环直到currentText==previousText是TRUE语句,那么这将起作用。但我看不到“循环”部分。你能解释一下吗。谢谢。