控制台状态更新文本消息

Console Status Update Text Messages

我有一个有效的 Google Apps 脚本,它在末尾显示单个 Web 应用程序输出。

脚本持续约 20 秒, 我希望改善用户体验, 通过在此期间间歇性地更新脚本状态。

我了解异步 server/client 操作的挑战, 但令我惊讶的是,这种“微不足道”的功能似乎很难实现。

我查看了类似的主题,但错过了一个很好的例子。

代码示例:

function doGet(e){
  output = function1();
  output = function2();
  return HtmlService.createHtmlOutput(output).
}

function function1() {
 //DoSomething
 return = "output1";
}

function function2() {
 //DoSomething
 return = "output2";
}

我不打算用 HTML 调用替换函数调用。 但如果可行的话,也许会不断轮询全局变量直到脚本执行完成?

也许为了让它更具体,

code.gs:

var data = "test";
Logger.log(data);

function doGet(){
  return HtmlService.createHtmlOutputFromFile('index');
}

function main() {
  data = "1";
  pushMSG(data);
  Logger.log(data);
  Utilities.sleep(2000);

  data = "2";
  pushMSG(data);
  Logger.log(data);
  Utilities.sleep(2000);

  data = "3";
  pushMSG(data);
  Logger.log(data);
  Utilities.sleep(2000);

  data = "4";
  pushMSG(data);
  Logger.log(data);
  Utilities.sleep(2000);

  data = "5";
  pushMSG(data);
  Logger.log(data);
  Utilities.sleep(2000);
}

function pushMSG(str){
  return str
}

index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>

  <body>
    <div id="output">Script Started ...</div>
   
    <script>
      google.script.run.main();

      var i = 0;
      var refreshId = setInterval( function () { 
        document.getElementById('output').innerHTML = data;
        google.script.run.withSuccessHandler(onSuccess).pushMSG();
        i = i + 1;
        if (i > 10) {
          clearInterval(refreshId);
          document.getElementById('output').innerHTML = "done1";
        }
      }, 500);

      function onSuccess(pushMSG) {
        document.getElementById('output').innerHTML = data;
      }

      document.getElementById('output').innerHTML = "done2";
    </script>
  </body>
</html>

但我还是找不到显示有效的 data 变量...

我找到了答案,

  1. 在 .gs 中创建缓存服务
  2. 在多个 .gs 函数中更新缓存键
  3. 使用 setInterval() 从 hmtl 轮询缓存键更新

我被这个维护良好且有趣的博客所触动 post: https://ramblings.mcpher.com/gassnippets2/implementing-a-client-side-progress-bar-reporting-on-server-side-work-for-htmlservice/

此致, 克里斯托夫