2017-10-25 8 views
0

シート上の浮遊画像をクリックしてGoogle Appスクリプトを実行しています。Google Appスクリプトが並行して実行されないようにする

最初の実行が終了する前に、スクリプトの実行を防ぐ方法を教えてください。

イメージをクリックして複数回スクリプトを実行でき、後続の実行が前のものと競合し、誤った結果が生じるようです。

スクリプトを実行中に浮動イメージと一時的に関連付けを解除していましたが、スクリプトを終了する前に復元していましたが、浮動イメージのプロパティを操作する方法が見つからないようです。

+0

ダイアログまたはサイドバーでボタンを使用する場合は、JavaScriptが無効になり、スクリプトが完了した後でコールバック関数で再度有効にすることができます。 [成功ハンドラー](https://developers.google.com/apps-script/guides/html/communication)を確認してください。私はあなたがスプレッドシート自体のボタンとして使用されるイメージでこれを行うことができるとは思わない。 – Cooper

答えて

1

クライアントサイドの処理では、変数に値を割り当てて、関数のステータスを識別できます。

index.htmlを

<!DOCTYPE html> 
<html> 
    <body> 
    <img src="http://cdn.soulsplay.com/assets//listing/css/comments/submit-button-2.png" onclick="invokeSubmit();"> 
    </body> 
    <script> 

    var image_clicked = 0; 

    function invokeSubmit(){ 
     image_clicked ++; 
     if(image_clicked == 1){ 
     alert("Processing"); 
     google.script.run.withSuccessHandler(function(){ 
      image_clicked = 0; 
      alert("done"); 
     }).sleep_func(); 
     } 
    } 
    </script> 
</html> 

code.gs

function doGet() { 
    var output = HtmlService.createTemplateFromFile('index').evaluate(); 
    output.setSandboxMode(HtmlService.SandboxMode.IFRAME); 
    output.setTitle('App Script'); 
    return output; 
} 

function sleep_func(){ 
    Utilities.sleep(15000); 
    return; 
} 

またLock Serviceを使用して同時アクセスからスクリプトを防ぐことができます。

function test_func(){ 
    var lock = LockService.getScriptLock(); 
    lock.waitLock(15000); 

    //Some operations 

    lock.releaseLock(); 
} 
+0

完璧!その最後の提案、LockServiceはまさに私が必要としていたものです。本当にありがとう –

関連する問題