有没有办法保证执行顺序?或者有什么方法可以取消当前正在执行的脚本吗?

时间:2013-03-06 15:34:56

标签: google-apps-script

我在文本框中有类似自动完成的功能。

textBox.addKeyUpHandler(textBoxLookupHandler)

会发生什么

如果用户输入速度相对较快,请说a b,则会发生以下情况。

  1. 调用a的处理程序。
  2. 调用ab的处理程序。
  3. ab返回的结果较少。因此,它会在 a
  4. 的处理程序之前返回
  5. 然后a的处理程序返回许多结果。
  6. 因此,最后,用户输入了ab,但他们会显示a的结果,因为a的结果覆盖了ab的结果。

    可能的解决方案

    如果我可以编写一些客户端脚本,我知道如何处理这个问题。但由于我使用的是UiApp,我不能这样做。

    1. 保证执行GAS的顺序(我确信这是不可能的/是一个荒谬的请求)
    2. 在GAS中使用某种方法取消所有其他当前运行的脚本。

1 个答案:

答案 0 :(得分:4)

GAS有一个Lock Service,可以保证您的执行顺序。请参阅Google Apps开发人员博客“Concurrency and Google Apps Script”条目。

您的处理程序应如下所示:

function textBoxLookupHandler(e) {
  var lock = LockService.getPrivateLock(); // Lock for just this user
  lock.waitLock(15000);  // wait max 15 seconds before exception.

  // Do whatever you used to do...

  lock.releaseLock();
  return app;
}