GS功能在RETURN后保持运行

时间:2019-05-04 23:37:48

标签: javascript google-apps-script

即使返回下一个函数,我的Google脚本功能仍保持运行。

总而言之,我有一个函数(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();
}

最后,我有了在nightTargetSelection中调用的dayStart函数。

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);
}

我希望一经调用dayStart,nightTargetSelection函数就会停止运行。

不幸的是,这没有发生,仅当下一个nightTargetSelection被调用时,nightTargetSelection函数才会完成。

如您所见,dayStart函数调用roleWakeUp,使其在函数之间循环。我已经省略了将循环详细信息包含到此问题中,因为我不认为这是相关的。让我知道是否相关,我将提供更多详细信息。

2 个答案:

答案 0 :(得分:0)

我不知道这是否是你的问题,但这是

anList = ['aba', 'baa', 'aab', 'cat', 'tac', 'act', 'sos', 'oss']
anDict = {}
for i in anList:
    in_dict = False
    for j in anDict.keys():
        if sorted(i) == sorted(j):
            in_dict = True
            anDict[j].append(i)
            break
    if not in_dict:
        anDict[i] = []

.withSuccessHandler(函数名或匿名函数)

答案 1 :(得分:0)

是的,因为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
}