【问题标题】:Is there any way to guarantee order of execution? Or is there any way to cancel currently executing scripts?有没有办法保证执行顺序?或者有什么办法可以取消当前正在执行的脚本?
【发布时间】:2013-03-06 15:34:55
【问题描述】:

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

textBox.addKeyUpHandler(textBoxLookupHandler)

会发生什么

如果用户打字比较快,比如ab,似乎会发生以下情况。

  1. a 的处理程序被调用。
  2. ab 的处理程序被调用。
  3. ab 返回的结果更少。因此,它a 的处理程序之前返回。
  4. a 的处理程序随后会返回许多结果。

所以最后,用户输入了ab,但他们看到了a 的结果,因为a 的结果覆盖了ab 的结果。

可能的解决方案

如果我可以编写一些客户端脚本,我知道我会如何处理这个问题。但是因为我用的是UiApp,所以我做不到。

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

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 2018-02-25
      • 1970-01-01
      • 2020-07-06
      相关资源
      最近更新 更多