google.script.run.withSuccessHandler не возвращает значение - PullRequest
1 голос
/ 06 июня 2019

это сводит меня с ума, код работал вчера, но не больше.Я попытался проверить весь синтаксис снова, но проблема все еще сохраняется.этот запрос на стороне сервера от листов Google показывает значение на стороне сервера (Logger.log()), но возвращает ноль на стороне клиента!Можете ли вы помочь мне найти проблему, пожалуйста!

  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) возвращает ноль!

Заранее спасибо.
M

1 Ответ

1 голос
/ 06 июня 2019

Я столкнулся с этой проблемой некоторое время назад, и это также почти привело меня в бешенство (о, радости свободно напечатанного JS!).Проблема в том, что вы пытаетесь вернуть недопустимый тип данных на клиентскую сторону.Функции, вызываемые через google.script.run, имеют ограничения на то, что они могут возвращать (например, вам следует избегать Date экземпляров).

Ограниченные типы

В настоящее время вы можетене возвращайтесь (см. документацию для подробного объяснения ограничений):

  1. Date экземпляров;
  2. Function;
  3. DOM элементов (хотя form разрешено);

Решение

Изменение ary[1]= new Date(r[0]); на ary[1] = r[0]; должно помочьпросто переместите Date парсинг к клиенту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...