Как правильно использовать LockService в WebApp, развернутом скриптами приложения Google? - PullRequest
0 голосов
/ 01 июня 2019

Я довольно новичок в использовании сценариев Google, и у меня возникают проблемы с пониманием того, как правильно использовать LockService в сценариях приложения Google, в частности в веб-приложении.В настоящее время я разрабатываю веб-приложение, которое будет доступно 25 разным пользователям, и они могут быть доступны в тот же период времени, и я хочу избежать коллизий, так как есть важная информация, которая проходит через этот скрипт.

Я уже читал о LockService и понимаю концепцию: предполагается, что разные пользователи не смогут получить доступ к части или к целому коду, включающему блокировку одновременно, верно?Но я не уверен, должен ли я реализовать это в файле .gs или в html и как.Здесь я оставляю основную часть своего кода:

INDEX

<html>
  <head>
    <meta name="MobileOptimized" content ="width">
  </head>

  <body>
    <form id="customerForm">
      <div id="output"></div> 
      <div id="signature"></div><br>
      <img id="rendered" src="" style="display:none">
      <input type="button" value="Enviar Firma" onclick="renderSignature();saveImage()"/>  </body>
    </form>
</html>
<?!= HtmlService.createHtmlOutputFromFile('JavaScript').getContent(); ?>

Сценарий для управления возвратами файлов GS

<script>
//..some code
  function saveImage(e){ //This sends the image src to saveImages function
    //Assign values to bytes and sign variables
    };
    google.script.run.withSuccessHandler(onSuccess).compare_tickets(bytes, sign);
    google.script.run.withFailureHandler(onFailure).compare_tickets(bytes, sign);
  } 
  function onSuccess(bytes){
     google.script.run.saveImage(bytes)
  }
  function onFailure(error) {        
    //Throw alert with the error
  }
</script>

Файл GS

function doGet(e){
  return HtmlService
    .createTemplateFromFile("index")
    .evaluate()
    .setTitle("Firme aquí por favor")
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function compare_tickets(bytes, sign){ //first function runned by the index
    //some code that reads Some spreadsheets 
}

function saveImage(bytes){    //second function runned by the index
  var lock = LockService.getScriptLock();
  if(lock.tryLock(10000)){
    //Do operations/readings/writings on different spreadsheets in case you get the lock
    lock.releaseLock();
  }                                                                               
  else{
    //Tell the user that the system is busy and should retry to send the info
  }
}

Таким образом, приведенный выше код показывает, что я пытаюсь реализовать LockService для файла GS, я уже пытался получить доступ из 3 разных браузеров одновременно, но похоже, что 3 из них на самом деле работают с кодом, а некоторыеинформация потеряна, я думаю, что блокировка не работает так, как я думал.

Не могли бы вы помочь мне разобраться, как реализовать блокировки?Заранее большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...