1

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

textBox.addKeyUpHandler(textBoxLookupHandler)

发生什么了

如果用户打字相对较快,例如a b,似乎会发生以下情况。

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

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

可能的解决方案

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

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

1 回答 1

4

GAS 有一个锁定服务,可以为您保证执行顺序。请参阅 Google Apps 开发人员博客“并发和 Google Apps 脚本”条目。

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

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;
}
于 2013-03-06T21:13:58.703 回答