google.script.run.withSuccessHandler不返回值

时间:2019-06-06 14:58:34

标签: google-apps-script

这让我发疯了,代码在昨天工作了,但是现在不行了。我试图再次检查所有语法,但是问题仍然存在。 google表格中的此服务器端请求,在服务器端(Logger.log())上显示了值,但在客户端返回了null!您能帮我找到问题吗!

  function supervisorLine(lineData){
    if (lineData== 'Name Value is not VALID!' ) {
      console.log("Supervisor Name Issue!");
    } else {
      document.getElementById('Team').value= lineData[7];
      document.getElementById('Shift').value= lineData[12];
      document.getElementById('action').classList.remove("disabled");
      console.log("team "+lineData[7]+" shift "+lineData[12]);
      ////////////////////////////////// need to be Moved somewhere after password check !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      google.script.run.withSuccessHandler(function(quickStat2){console.log(quickStat2)}).loginRecords(lineData[7],lineData[12]);                
    }
  }  

这也是我的服务器端代码。

function loginRecords(team,shift){
  var sh = ss.getSheetByName("Attn Rec");
  var result= [];
  var matchRec= sh.getRange("a2:l"+sh.getLastRow()).getValues().filter(function(a){
    return a[1]===shift && a[4].valueOf()==team.valueOf()});
  uniqeLogin = removeDups(matchRec.map(function (a){return a[9]}));
  // Logger.log(uniqeLogin);
  uniqeLogin.forEach(function (a){
    var ary=[team,0 ,shift,"",0,0,0,0,0];
    matchRec.forEach(function (r){
      if(r[9]===a) {
        ary[1]= new Date(r[0]);
        ary[3]= r[8];
        switch (r[3].toString().toLowerCase()) {
          case "off-site work":
          case "hr action":
            ary[8]++;
            break;
          case "present":
          case "late transfer":
          case "transfer":
            ary[4]++;
            break;
          case "no show":
            ary[5]++;
            break;
          case "Sick":
          case "vacation":
            ary[7]++;
            break;
          case "late":
          case "approved delay start":
            ary[6]++;
            break;
          }
        }
      });
    result.push(ary);
  });
  Logger.log(result); 
  return result;
}  

回顾一下,Logger.log(result)返回我需要的数组,但是console.log(quickStat2)返回null!

先谢谢了。
M

1 个答案:

答案 0 :(得分:1)

前一段时间,我碰到了这个问题,这也几乎使我发疯(哦,宽松的JS的乐趣!)。问题在于您正试图将不可接受的类型数据返回给客户端。通过google.script.run调用的函数对其返回值有限制(例如,应避免使用Date实例)。

受限类型

当前,您无法返回(请查看documentation,了解有关限制的详细说明):

  1. Date实例;
  2. Function;
  3. DOM元素(虽然允许使用form

解决方案

ary[1]= new Date(r[0]);更改为ary[1] = r[0];应该可以解决问题,只需将Date解析移动到客户端即可。