Есть ли способ получить значения из обработчика успеха без вызова другой функции? - PullRequest
0 голосов
/ 19 марта 2019

Хорошо, сейчас я делаю это:

google.script.run
  .withSuccessHandler(updateOutput)
  .withFailureHandler(errorOutput)
  .finish();

А потом

  function updateOutput(info) 
  {
    var br='<br />';
    var outputDiv = document.getElementById('status');
    outputDiv.innerHTML = 'First Logic Compete' + br +   br +'GotoLogic: ' +info.slide+ br + 'Copy text: ' + info.text + br ;  
  }

Есть ли способ отменить необходимость вызова другой функции? и напрямую взаимодействовать с объектом результата google.script.run внутри первой функции?

Редактировать, это тоже не работает, возвращаемое число пустое:

var object = google.script.run
  .withSuccessHandler(function (number) {
    document.getElementById('bugLink').href = "https://bug.com/issues/" + number;
    document.getElementById('time').innerHTML = number;
  })
  .finish();

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Вы имеете в виду это?

Это сторона клиента:

google.script.run
.withSuccessHandler(function(html){
     document.getElementById('id').innerHTML=html;
   })
.getHtml();

Сторона сервера:

function getHtml() {
  return '<h1>Hello World</h1>';
}
0 голосов
/ 19 марта 2019

Обработчик, вызываемый другим кодом при выполнении другого кода, является требованием асинхронной связи.Если вы хотите, вы можете определить встроенный обработчик:

const TASK = google.script.run.withFailureHandler(errorOutput);
TASK
  .withSuccessHandler((info, userObj) => {
    ...
  })
  .foo();
TASK
  .withSuccessHandler((otherInfo, userObj) => {
    ...
  })
  .otherFoo();
...

Или, если вы презираете обратные вызовы, вы можете использовать Promises на стороне клиента HTML:

const makeAppsScriptCall = (fnName, obj, ...args) => {
  return new Promise((resolve, reject) => {
    let TASK = google.script.run
      .withSuccessHandler(resolve)
      .withFailureHandler(reject);
    if (obj) {
      TASK = TASK.withUserObject(obj);
    }
    if (TASK[fnName] === undefined) {
      reject("'" + fnName + "' is not a global function in your Apps Script project");
    } else {
      TASK[fnName].apply(null, args);
    }
  });
};

function doStuffAsPromises(userObjBtn) {
  makeAppsScriptCall("finish", userObjBtn, myarg1, myarg2, myarg3, ...)
    .then(...)
    .catch(...);
}

(Очевидно, если клиентБраузер не поддерживает Promises или синтаксис распространения для «параметров покоя», вам необходимо будет заполнить / изменить соответствующим образом.)

Ссылки

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