Google Script - добавление электронной таблицы Google в режиме asyn c - PullRequest
1 голос
/ 17 февраля 2020

Я создал функцию для добавления массива в электронную таблицу Google. Обычно в моем массиве более 5 элементов. На стороне клиента я группирую данные в массив и отправляю на сервер, используя «google.script.run. myFunction (params) ». Затем я использую структуру al oop, чтобы сделать это на стороне сервера. Я полагаю, что моя клиентская сторона работает, даже серверная сторона не закончила работу. Как я мог бы сделать, чтобы клиентская сторона ожидала, что серверная часть закончит sh запуск?

По крайней мере, моя серверная сторона также выполняет добавление в электронную таблицу, не дожидаясь выполнения финал sh.

Моя функция на стороне клиента:

function sendArr(){
          var userInfo = {};
          var arr = new Array();
          var localTable = "";
          var gravar = 0;

          try{

            localTable = document.getElementById("scheduleTable");

            if(document.getElementById("repNome").value === "") {
              throw new Error();
            }

            if(document.getElementById("yearSchedule").value === ""){
              throw new Error();
            }; 

            for(var i=1;i<localTable.rows.length;i++){

              for(var y=1;y<localTable.rows[0].cells.length;y++){

                var hour = document.getElementById(localTable.rows[i].cells[0].innerHTML+localTable.rows[0].cells[y].innerHTML).value;

                if(hour !== ""){
                  userInfo.repName = document.getElementById("repNome").value;
                  userInfo.week = document.getElementById("yearSchedule").value;
                  userInfo.cdlName = localTable.rows[i].cells[0].innerHTML;
                  userInfo.dayName = localTable.rows[0].cells[y].innerHTML;
                  userInfo.hour = hour; 



                  arr.push(userInfo);

                  gravar = 1;

                }
              }           
            }

            if(gravar === 1) {
              google.script.run.myFunction(arr);
              alert("Ok!")
            };

          } catch(err) {
            alert(err.message);
          }

        }

Моя функция на стороне сервера:

var url = "mylink.com";

function myFunction(arr) {
try{
    var ss = SpreadsheetApp.openByUrl(url);
    var ws = ss.getSheetByName("AgendaSemanal");
    let userInfo = [];

    for(i = 0; i<arr.length; i++) {

      userInfo = arr[i];

      ws.appendRow([userInfo.repName, 
                    userInfo.week, 
                    userInfo.cdlName, 
                    userInfo.dayName, 
                    userInfo.hour,
                    new Date()])

  }               

  } catch(err){
      Logger.log(err);
  } finally {

  return ;
  }
}```


1 Ответ

0 голосов
/ 17 февраля 2020

Используйте withSuccessHandler, как показано ниже:

if(gravar === 1) {
  google.script.withSuccessHandler(function() {
    alert("Ok!");
  }).run.myFunction(arr);              
};

Обратный вызов вызывается после возврата со стороны сервера.

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