Функция GS продолжает работать после возврата - PullRequest
0 голосов
/ 05 мая 2019

Моя функция Google Scripts продолжает работать даже после возврата следующей функции.

Подводя итог, у меня есть функция (nightTargetSelection), которая вызывает другую функцию (dayStart). И как только будет вызвана вторая функция, я хочу, чтобы первая перестала работать.

Я урезал функцию и удалил все, что не должно относиться к этому посту. Но, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Во-первых, я вызываю форму ввода пользователя через следующий код в GS:

function roleWakeUp (roleName, j){ 
  var roleStrAppend = "<div id='id_role_name' style='display:none;'>" + roleName + "</div>";
  var jAppend = "<div id='id_j' style='display:none;'>" + j + "</div>";

  var actionInputDlg = HtmlService.createHtmlOutputFromFile('night')
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  .setWidth(600)
  .setHeight(425);

  var wakeUpText = roleName + " wakes up."

  actionInputDlg.append(roleStrAppend).append(jAppend);
  SpreadsheetApp.getUi().showModalDialog(actionInputDlg, wakeUpText);
}

Тогда у меня есть форма, отправленная пользователем через HTML / JS:

<script>
selected = select.options[select.selectedIndex].value  
       google.script.run.withSuccessHandler(selected).nightTargetSelection(selected);
google.script.host.close();
</script>

Вернувшись в GS, у меня есть nightTargetSelection (проблемная функция, которая мне нужна, помогла исправить)

function nightTargetSelection (selected){      
    return dayStart();
}

Наконец, у меня есть функция dayStart, которая вызывается в nightTargetSelection.

function dayStart() {
  Browser.msgBox("DAY START");
  //If I do not close the msgBox within 6 minutes (GS timeout period), then nightTargetSelection times out.

roleWakeUp (roleName, j);
}

Я ожидаю, что функция nightTargetSelection перестает работать, как только вызывается dayStart.

К сожалению, этого не происходит, и функция nightTargetSelection завершается только при вызове следующего nightTargetSelection.

Как видите, функция dayStart вызывает roleWakeUp, что делает его циклом между функциями. Я пропустил включение деталей цикла в этот вопрос, потому что я не считаю, что это актуально. Дайте мне знать, если это уместно, и я предоставлю более подробную информацию.

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Да, потому что nightTargetSelection() не завершится, пока не завершатся все вызванные процессы или не истечет время ожидания.

Похоже, конец цикла равен Browser.msgBox("DAY START");. Поэтому позвольте вашему серверному коду завершить выполнение, а затем используйте .withSuccessHandler() для вызова roleWakeUp() через клиентский скрипт.

(Я действительно не знаю, что делает ваш код. nightTargetSelection() кажется ненужным, учитывая предоставленную вами информацию. Поэтому приведенный ниже пример является абстракцией, показывающей вам поток.) ​​

Клиентский скрипт

<script>
  function yourOriginal() {
    selected = select.options[select.selectedIndex].value;
    google.script.run
      .withSuccessHandler(restartCycle) // Calls restartCycle() after nightTargetSelection() finishes
      .nightTargetSelection(selected);
    google.script.host.close();
  }

  function restartCycle(values) {
    google.script.run.roleWakeUp(values.roleName, values.j);
  }
</script>

Серверные сценарии

function roleWakeUp(roleName, j) {
  // opens the dialog
}

function nightTargetSelection(selected) {      
  return dayStart();
}

function dayStart() {
  Browser.msgBox("DAY START");
  return {"roleName": roleName, "j": j}; // Pass these values to client-side script
}
0 голосов
/ 05 мая 2019

Я не знаю, если это ваша проблема, но в этом:

<script>
      var selected=select.options[select.selectedIndex].value;  
       google.script.run
       .withSuccessHandler(selected)//select is supposed to be a function name
       .nightTargetSelection(selected);
        google.script.host.close();
</script>

.withSuccessHandler (имя функции или анонимная функция)

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