有没有办法在不调用另一个函数的情况下从成功处理程序中获取值?

问题描述 投票:0回答:2

好的,现在我这样做:

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();
asynchronous google-apps-script
2个回答
1
投票

你是说这个吗?

这是客户端:

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

服务器端:

function getHtml() {
  return '<h1>Hello World</h1>';
}

0
投票

每当完成其他代码时由其他代码调用的处理程序是异步通信的要求。如果需要,可以内联定义处理程序:

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

或者,如果你鄙视回调,你可以在客户端HTML中使用Promises:

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或“rest parameters”的扩展语法,则需要根据需要进行polyfill / modify。)

参考

© www.soinside.com 2019 - 2024. All rights reserved.