函数完全执行之前,带有withSuccessHandler的Google Apps脚本正在运行

时间:2019-07-30 14:42:58

标签: google-apps-script google-sheets google-apps-script-addon

我在Apps Script项目中有两个文件。一个是充当“服务器”的.gs文件,另一个是包含根据Google Apps脚本指南的JavaScript的.html文件。

在此项目开发的前40个小时中,所有工作都进行得很顺利。我在任何功能之外都有以下代码行,位于.html文件中的两个标签之间:

google.script.run.withSuccessHandler(setSheetData).getSheetData();

文档:https://developers.google.com/apps-script/guides/html/reference/run#withSuccessHandler(Function)

根据文档,getSheetData()应该首先在.gs文件中执行,然后返回一个值,然后将该值传递到存在于.html文件中的setSheetData中。

服务器文件:

  function getSheetData() {
  var ss = SpreadsheetApp.getActive();
  var activeSheet = ss.getActiveSheet();
  var sheetName = activeSheet.getName();
  var sheetVals = activeSheet.getDataRange().getValues();
  return [sheetName, sheetVals];
}

HTML文件:

function setSheetData(data) {
    alert(data);
    sheetName = data[0];
    sheetData = data[1];
    headers = sheetData[0];
    document.getElementById('sheetLook').innerHTML = 'Looking at sheet: ' + sheetName;
}

我怎么知道这与执行速度有关: 当前,alert()调用仅打印出null。它从中绘制的图纸包含4行数据。但是,所有其他情况保持不变,如果我只是查看具有0-1行数据的工作表,它将正确地警告整个数据值。

在getSheetData()内,如果我添加Logger.log(sheetVals),则无论大小如何,它都能正确记录整个工作表的数据。问题在于成功处理程序正在之前执行,有时间进行评估。

1 个答案:

答案 0 :(得分:1)

可能的原因:

  • 数据第3-4行中的非法返回值
  • 没有active工作表。

解决方案:

  • 避免返回非法值,例如Date对象。或JSON.stringify(),然后再返回客户。
  • getSheetByName或数字,而不是凭active ness来获取。

参考文献: