javascript - 如何运行长脚本并向 html 对话框发送持续反馈

标签 javascript html google-apps-script client-server google-sheets-api

在 Google 电子表格中,我有一个很长的脚本,可以分步执行许多操作,例如:

function MyLongScript()
{  
   var Results1 = Action1();
   //send feedback 1
   var Results2 = Action2(Results1);
   //send feedback 2
   var Results3 = Action3(Results2);
   //send feedback 3

   //end code
}

我想向用户显示一个对话框,告诉他们脚本正在运行并更新脚本的每个步骤,例如“Action1 完成”,...,“Action2 完成”等等。

所以,我有一个 HTML 界面,其中包含一些带有这些步骤的表行。问题是:如何让对话框看到代码执行了某个步骤?

现在我正在尝试在加载对话框后启动代码:

$(function() {   

   google.script.run
      .withSuccessHandler(MainCodeSuccess)
      .withFailureHandler(MainCodeFailure)
      .MyLongScript();
}

并且使用 UI 和 HtmlService 调用对话框:

function CallDialog()
{
  var ui = HtmlService.createTemplateFromFile('FeedbackWindow')
    .evaluate()
    .setWidth(300)
    .setHeight(500);
  SpreadsheetApp.getUi().showModalDialog(ui, "Dialog Title");
}

我需要的是对话框脚本中的 getStatus() 或服务器脚本中的 sendStatus()

实现这一目标的最佳方法是什么?

最佳答案

您可以同时对服务器运行多个 google.script.run 调用。您不能让一个服务器调用发送多个成功回调。您可以让您的 MyLongScript() 运行,将进度状态保存在某处,然后保持运行,然后每隔一定时间在循环上执行第二个 google.script.run时期。您可以使用 JavaScript setInterval(): window.setInterval("javascript function", milliseconds); 我认为没有 jQuery 等效项。

所以它可能(大致)看起来像这样:

$(function() {   

   google.script.run
      .withSuccessHandler(MainCodeSuccess)
      .withFailureHandler(MainCodeFailure)
      .MyLongScript();

   window.setInterval("statusChecker()", milliseconds);

}

window.statusChecker = function() {
  google.script.run
    .withSuccessHandler(statusCheckSuccess)
    .withFailureHandler(onFailure)
    .StatuChecker();
};

window.statusCheckSuccess = function(returnStatus) {
  if (returnStatus !== false) {
    //To Do - show msg to user
    document.getElementById('idMsgToUser').textContent = returnStatus;
  };

};

您的MyLongScript()可能需要将当前状态保存到文件中。我不确定后续并发的 google.script.run 调用是否会清除全局变量中的数据。如果全局变量即使在所有服务器脚本同时运行的情况下也能保存数据,那么您可以将当前状态保存到全局变量中。您需要对此进行试验,或者也许有人知道该问题的答案。

关于javascript - 如何运行长脚本并向 html 对话框发送持续反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668379/

相关文章:

javascript - jQuery [data-anchor] 似乎出现故障

html - Firefox 上的一对 div 包装

javascript - 在替换第 n 个子字符串 Google 脚本中将变量添加到 RegEx

javascript - 为什么 Twitter Bootstrap 类 navbar-fixed-top 不起作用?

javascript - jQuery 单击 div 之外的动画使其关闭可以工作,但必须单击两次才能打开

html - 可以在不移动文本的情况下使用 CSS 移动背景吗?

javascript - 该应用程序脚本有什么问题[用于替换文本]

google-apps-script - 如何在 Google Apps 脚本中转置和拆分?

javascript - 将按键代码转换为字符

javascript - HTML 表单 onsubmit 有时仅起作用