1

テキスト ボックスにオートコンプリートのような機能があります。

textBox.addKeyUpHandler(textBoxLookupHandler)

何が起こるのですか

ユーザーが比較的速く入力している場合、たとえばa b、次のように見えます。

  1. のハンドラaが呼び出されます。
  2. のハンドラabが呼び出されます。
  3. abより少ない結果を返します。このため、 のハンドラのに戻りますa
  4. thenのハンドラーaは多くの結果を返します。

結局、ユーザーは を入力しましたが、 の結果が の結果を上書きしたため、 のab結果が表示されています。aaab

可能な解決策

クライアント側のスクリプトを書くことができれば、この問題をどのように処理するかはわかっています。でも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 に答える